码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode 第540题 有序数组中的单一元素

时间:2019-01-11 21:21:04      阅读:22      评论:0      收藏:0      [点我收藏+]

标签:思路   cat   时间复杂度   注意   else   length   应该   int   奇数   


/*
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。
[0,1,1,2,2,5,5]
示例 1:

输入: [1,1,2,3,3,4,4,8,8]
输出: 2
示例 2:

输入: [3,3,7,7,10,11,11]
输出: 10
注意: 您的方案应该在 O(log n)时间复杂度和 O(1)空间复杂度中运行。*/


/*

思路:  用二分法.
mid 为偶数: mid和哪边元素相同,单个的数就在哪边.
mid 为奇数: mid和哪边元素不同,单个的数就在哪边.
为了简化代码,当mid为奇数时,mid--,转化为偶数.
*/


 1 class Solution540 {
 2 
 3   public int singleNonDuplicate(int[] nums) {
 4     int left = 0;
 5     int right = nums.length - 1;
 6     while (left < right) {
 7 
 8       int mid = (left + right) >> 1;
 9       if ((mid & 1) == 1) {
10         --mid;
11       }
12       if (nums[mid] == nums[mid + 1]) {
13         left = mid + 2;
14       } else {
15         right = mid;
16       }
17     }
18     return nums[left];
19   }
20 }

 



LeetCode 第540题 有序数组中的单一元素

标签:思路   cat   时间复杂度   注意   else   length   应该   int   奇数   

原文地址:https://www.cnblogs.com/rainbow-/p/10257128.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!