美文网首页快乐写代码
T540、有序数组中的唯一元素

T540、有序数组中的唯一元素

作者: 上行彩虹人 | 来源:发表于2020-05-16 19:15 被阅读0次

给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。
示例 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+1的值相等说明唯一数在右边,否则在左边。

 public int singleNonDuplicate(int[] nums) {
        if(nums.length<1)
            return 0;
        int i = 0, j = nums.length - 1;
        while(i < j){
            int mid = i + (j - i) / 2;
            if(mid % 2 == 1)
                mid--;
            if(nums[mid] == nums[mid+1])
                i = mid + 2;
            else 
                j = mid;
        }
        return nums[j];
    }

解2

二分查找是除去中间的2个相同数,则唯一数在奇数的一方

 public int singleNonDuplicate(int[] nums) {
        if(nums.length<1)
            return 0;
        int i = 0, j = nums.length - 1;
        while(i < j){
            int mid = i + (j - i) / 2;
            if(nums[mid]==nums[mid+1]){
                if((mid-1-i+1) % 2 ==1)
                    j = mid-1;
                else 
                    i = mid + 2;
            }else if(nums[mid]==nums[mid-1]){
                if((mid-2-i+1) % 2 ==1)
                    j = mid-2;
                else 
                    i = mid + 1;
            }else
                return nums[mid];
        }
        return nums[j];
    }

相关文章

  • T540、有序数组中的唯一元素

    给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例 1:输入: [1,1...

  • Java-Day7

    Java 数组 1, 数组是有序数据的集合, 数组中的每个元素具有相同的数组名和下标来做唯一标识 数组声明形式: ...

  • Swift 数组

    数组的简单介绍 数组是一串有序的由相同类型元素构成的集合 数组中的元素是有序的,可以重复出现 在Swift中数组(...

  • Java数组

    数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来做唯一标识。 java数组的两大特点: 强类型: ...

  • 二十三:Java基础入门-Java数组

    1、数组的定义 数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来做唯一标识。 2、数组的分类 一维数...

  • Swift--原生集合类型

    数组 字典 Set集合 数组 数组:是一串有序的由相同类型元素构成的集合。数组中的集合元素是有序的,可以重复出现。...

  • 递归方法判断数组中的元素是不是有序

    问题:给定一个数组,请用递归方法判定数组中的元素是不是有序。分析:如果数组中只有一个元素,直接返回1表示有序

  • 06 - 基础篇之数组

    一. 数组的介绍 • 数组(Array)是一串有序的由相同类型元素构成的集合• 数组中的集合元素是有序的,可以重复...

  • 数组

    数组 由一组相同数据类型变量组成的有序集合,数组中的变量称为数组元素,元素在数组中位置称为下标,数组中元素个数称为...

  • Java数组

    数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来做唯一标识。1、数组的声明(两种方法) 2、分配空间...

网友评论

    本文标题:T540、有序数组中的唯一元素

    本文链接:https://www.haomeiwen.com/subject/iwvrohtx.html