要求O(logn)的复杂度基本就是二分。
分析序列1,1,2,2,3,4,4,5,5
(0,1),(2,3),(5,6),(7,8)各自成对。
0,1 10,11 101,110 111,1000
可以观察出目标的左边可用^异或找出成对的,右边则不行,所以可以据此来二分。
1 class Solution { 2 public: 3 int singleNonDuplicate(vector<int>& nums) { 4 int n=nums.size(); 5 int l=0,r=n-1; 6 while(l<r){ 7 int mid=l+r>>1; 8 if(nums[mid]==nums[mid^1]){ 9 l=mid+1; 10 }else{ 11 r=mid; 12 } 13 } 14 return nums[l]; 15 } 16 };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端