zoukankan      html  css  js  c++  java
  • 540. Single Element in a Sorted Array

    package LeetCode_540
    
    /**
     * 540. Single Element in a Sorted Array
     * https://leetcode.com/problems/single-element-in-a-sorted-array/
     * You are given a sorted array consisting of only integers where every element appears exactly twice,
     * except for one element which appears exactly once.
     * Find this single element that appears only once.
     *
    Follow up: Your solution should run in O(log n) time and O(1) space.
    
    Example 1:
    Input: nums = [1,1,2,3,3,4,4,8,8]
    Output: 2
    
    Example 2:
    Input: nums = [3,3,7,7,10,11,11]
    Output: 10
    
    Constraints:
    1. 1 <= nums.length <= 10^5
    2. 0 <= nums[i] <= 10^5
     * */
    class Solution {
        /*
        * solution 1: xor, two same num xor return 0, otherwise return 1,
        *   Time complexity:O(n), Space complexity:O(1)
        * solution 2: binary search, we found the index of single number is even,
        *   Time complexity:O(logn), Space complexity:O(1)
        * */
        fun singleNonDuplicate(nums: IntArray): Int {
            //solution 1
            /*
            var result = 0
            for (num in nums){
                result = result xor num
            }
            return result
            */
    
            //solution 2
            val n = nums.size
            var left = 0
            var right = n - 1
            while (left < right) {
                //we check the index of pair, if m is even, so n is odd
                //for example: [1,1,2]: we should check index 0,1; [10,11,11]: we should check index 1,2
                val m = left + (right - left) / 2
                val n = if (m % 2 == 0) m + 1 else m - 1
                if (nums[m] == nums[n]) {
                    //for example:[3,3,7,7,10,11,11]
                    //search in right side
                    left = m + 1
                } else {
                    right = m
                }
            }
            return nums[left]
        }
    }
  • 相关阅读:
    [NoiPlus2016]换教室
    [HNOI2013]游走
    [Noi2002]Savage
    [SDOI2010]古代猪文
    [JSOI2008]最小生成树计数
    [SCOI2010] 连续攻击游戏
    文艺平衡树
    指针FHQTreap
    HAOI2007 上升序列
    HNOI2008 玩具装箱
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13823915.html
Copyright © 2011-2022 走看看