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

力扣540. 有序数组中的单一元素

在这里插入图片描述
这一题的大意是说给出一个单增的有序数组,每一个元素都会出现两次,只有一个元素会出现一次,现在让我们返回只出现一次的那一个数。
题目上要求时间复杂度为O(logn)空间复杂度O(1)
很明显只有二分。
关键在于怎么二分
需要我们深刻理解题目上的条件。
每一个元素都会出现两次,只有一个元素会出现一次 那么一定是奇数个
又因为数组是有序的,是从小到大的,那么单个元素出现两次,这两个相同的元素一定是相邻的。
那么那一个只出现一次的数一定位于偶数位
并且如果元素位于只出现一次的元素的右边,那么一个偶数位2k的元素一定和奇数位2k+1的元素是不相等的。
如果元素位于只出现一次的元素的左边,那么一个偶数位2k的元素一定和奇数位2k+1的元素是相等的。
那么我们就明确了二分的条件。
因为只能找用偶数和它相邻的奇数作比较,因此我们的二分范围为
l=0 r=(nums.size()-1)/2-1;
完整代码如下:

class Solution {
public:int singleNonDuplicate(vector<int>& nums) {int l=0;int r=(nums.size()-1)/2-1;while(l<=r){int mid=(l+r)/2;if(nums[mid*2]==nums[mid*2+1]){l=mid+1;}else{r=mid-1;}}return nums[l*2];}
};

时间复杂度O(logn)
关键在于分析清楚题意,明确二分的条件。

http://www.dtcms.com/a/581834.html

相关文章:

  • 无锡网站推广¥做下拉去118cr广告策划方案范例模板
  • 滑动窗口统计量构建从原始Tick到LSTM输入序列的数据转换框架
  • 农业网站建设的特点是大连开发区凯旋国际
  • 智能时代技术融合之道:大模型、微服务与数据安全的系统化实践
  • LeetCode 418 - 屏幕可显示句子的数量
  • 每日两题day36
  • LLM(大语言模型)
  • Solidity 与 x402 协议
  • 逆变器之SPWM调制
  • Java基础——常用算法5
  • Qt数据可视化实战:饼图、线图与表格的完整指南
  • qq代挂网站建设ps怎么做网站的广告条
  • 两个显示器鼠标方向调整
  • window server2008下Oracle 配置dblink查询 MySQL 数据
  • 软件数据库测试:【数据库质量保障:从单元测试到性能优化】
  • Windows安装Mujoco
  • vue3切换路由时页面空白问题解决办法
  • 时尚网站设计案例网站建设与网站主机的选择
  • 只买域名不建网站手机网站页面模板
  • Via安卓纯净版浏览器 v6.7.1去广解锁高级版
  • Ubuntu 24编译Android源码问题解决
  • 南宁市建设工程质量安全协会网站男性专科正规医院
  • 企业为什么建设网站wordpress5无法创建目录
  • Flutter 加固方案对比与实战,多工具组合的跨平台安全体系(Flutter App 加固/IPA 成品混淆/Ipa Guard CLI/自动化安全流程)
  • Qt/QML DelegateModel基础用法示例
  • 使用hping3进行网络协议测试与防火墙测试的完整指南
  • 西安网站建设市场烟台网站建设团队
  • 如何使用指标来确定趋势
  • 【vsftpd】centos和ubuntu部署vsftpd服务
  • 各大网站发布seo点击