lettcode:540. Single Element in a Sorted Array(已排序数组中出现一次的数字,其他数字出现两次)

来源:互联网 发布:奥运会标志 知乎 编辑:程序博客网 时间:2024/06/05 17:32
Given a sorted array consisting of only integers where every element appears twice except for one element which appears once. Find this single element that appears only once.Example 1:Input: [1,1,2,3,3,4,4,8,8]Output: 2Example 2:Input: [3,3,7,7,10,11,11]Output: 10Note: Your solution should run in O(log n) time and O(1) space.

不满足题意的解法:

public static int singleNonDuplicate(int[] nums) {        if (nums.length==1) {            return nums[0];        }else if(nums.length==2) {            return 0;        }else if(nums.length==3) {            if(nums[0]==nums[1]) return nums[2];            else return nums[0];        }else{            int index = 0;            while(index<nums.length){                if (nums[index]!=nums[index+1]) {                    return nums[index];                }                index = index + 2;                if (index==nums.length-1) {                    return nums[index];                }            }        }        return 0;    }

二分法查找:

int low = 0;
int high = nums.length-1;

    while(low < high) {        int mid = low + (high - low)/2;        if(nums[mid] != nums[mid+1] && nums[mid] != nums[mid-1])            return nums[mid];        else if(nums[mid] == nums[mid+1] && mid % 2 == 0)            low = mid+1;        else if(nums[mid] == nums[mid-1] && mid % 2 == 1)            low = mid+1;        else            high = mid-1;    }    return nums[low];
阅读全文
0 0
原创粉丝点击