当前位置: 首页 > java >正文

二分查找-268.丢失的数字-力扣(LeetCode)

一、题目解析

1.数据是无序的

2.数据是独一无二的

二、 算法解析

解法1:哈希表 空间复杂度O(N)

将数组元素插入到hash表中,如果hash[i] == 0,则缺失元素为i

解法2:位运算(^)

由于异或运算的性质:a^a=0,0^a=a,(a^b)^c=(a^c)^b。结合性质异或结果就是缺失的数

解法3:高斯求和公式

由于[0,n]有n+1个数,在数组中[0,n-1]有n个数,通过高斯求和公式求出n+1个元素的总和,减去数组中的n个数,剩下的就是缺失的数

解法4:排序+二分查找

由于数据是无序的,所以先用sort函数进行排序

虽然这里重点是二分查找,但还是建议把4种解法都尝试一遍

三、代码示例

解法1:

    int hash[10004];int missingNumber(vector<int>& nums)//解法1:哈希表 空间复杂度为O(N){int ret = 0;for(auto& e : nums) hash[e] = 1;for(int i = 0;i<nums.size()+1;i++){if(!hash[i]){ret = i;break;}}return ret;}

 

解法2:

    int missingNumber(vector<int>& nums)//解法2:位运算{int ret = 0;for(auto e : nums) ret ^= e;for(int i = 1;i<nums.size()+1;i++){ret ^= i;}return ret;}

 

解法3:

    int missingNumber(vector<int>& nums)//解法3:高斯求和{int sum = 0;sum = (nums.size()*(nums.size()+1))/2;for(auto e : nums) sum -= e;return sum;}

 

解法4:

    int missingNumber(vector<int>& nums)//解法4:二分查找{sort(nums.begin(),nums.end());int left = 0,right = nums.size()-1;while(left<right){int mid = left + (right - left)/2;if(nums[mid] == mid) left = mid + 1;else right = mid;}return nums[right] == right ? right+1 : right;}

 

看到最后,如果对您有所帮助,还请点赞、收藏和关注,我们下期再见! 

http://www.xdnf.cn/news/16325.html

相关文章:

  • ABP VNext + Razor 邮件模板:动态、多租户隔离、可版本化的邮件与通知系统
  • java面试题1
  • IOPaint 图像修复工具,学习笔记
  • openmv识别数字
  • 质数、因数、最大公约数经典问题整理
  • KNN 算法进阶:从基础到优化的深度解析
  • lesson24:Python的logging模块
  • 将文件移入回收站而不是直接删除
  • 7月25号打卡
  • 太极生两仪,两仪生四象,四象生八卦
  • 13.使用C连接mysql
  • Windows Server 2003 R2系统C盘扩容教程
  • 【深度学习新浪潮】Claude code是什么样的一款产品?
  • 【Linux系统】基础IO(下)
  • 常见问题三
  • linux 进程信号
  • 佳能iR-ADV C5560复印机如何扫描文件到电脑
  • Gorm教程 - 关联
  • 电厂液压执行器自动化升级:Modbus TCP与DeviceNet的协议贯通实践
  • 微观低代码
  • SpringBoot实战指南:从快速入门到生产级部署(2025最新版)
  • 【运维】ubuntu 安装图形化界面
  • Vue2下
  • SQLFluff
  • Hive-vscode-snippets
  • [特殊字符] 第9篇:《SQL高阶 SELECT 技巧:DISTINCT、ORDER BY、LIMIT 全家桶》
  • CN3798-2A 降压型单节锂电池充电芯片
  • Androidstudio 上传当前module 或本地jar包到maven服务器。
  • 二分查找----6.寻找两个正序数组的中位数
  • Python 数据分析(一):NumPy 基础知识