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

二分查找-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.dtcms.com/a/297394.html

相关文章:

  • 火候:烹饪的温度密码
  • DNF: Decouple and Feedback Network for Seeing in the Dark
  • Java线程基础面试复习笔记
  • 主要分布在背侧海马体(dHPC)CA1区域(dCA1)的时空联合细胞对NLP中的深层语义分析的积极影响和启示
  • 高级06-Java网络编程:从Socket到HTTP
  • 数据结构3-单双链表的泛型实现及ArrayList与LinkedList的区别
  • VUE懒加载(4种方式)
  • 深入理解 BIO、NIO、AIO
  • Java并发编程第十篇(ConcurrentHashMap组件分析)
  • Zabbix7设置告警
  • SQL基础⑭ | 变量、流程控制与游标篇
  • 从语言关联到事件推演的跃迁之路-语义图谱、知识图谱与事理图谱:认知的三维拼图
  • IA课程作业
  • C++调用GnuPlot一维绘图
  • 后端项目中大量 SQL 执行的性能优化
  • Oracle 19C Data Guard :从原理到实践的高可用解决方案
  • 在VSCode配置Java开发环境的保姆级教程(适配各类AI编程IDE)
  • CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器
  • 电科金仓新一代数据库一体机:以 “云数据库 - AI 版” 引领 AI 时代数据库变革
  • 文心4.5开源之路:从封闭到开放的力量
  • PHP 面向对象
  • HTML:从 “小白” 到 “标签侠” 的修炼手册
  • vue 渲染 | 不同类型的元素渲染的方式(vue组件/htmlelement/纯 html)
  • 低空飞行调度系统
  • STM32-PWM输入捕获的配置
  • 私有化大模型架构解决方案构建指南
  • js实现宫格布局图片放大交互动画
  • 文件包含学习总结
  • 数据库设计双刃剑:范式规范与反范式性能的终极权衡
  • 在 IntelliJ IDEA 中打开这个用于设置 Git 用户名(Name)和邮箱(Email)的特定弹窗