美文网首页
有序数组中的单一元素

有序数组中的单一元素

作者: 叫我宫城大人 | 来源:发表于2019-05-20 14:15 被阅读0次

题目

给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。

思想

折半查找,计算当前值与前后值得大小关系,得到单一元素存在的区间。时间复杂度为 O(log n),空间复杂度为 O(1)。

示例

public int singleNonDuplicate(int[] nums, int p, int q) {
    if (p == q) return nums[p];
    int mid = (p + q) / 2, key = nums[mid], m = nums[mid - 1], n = nums[mid + 1];
    if (m != key && n != key) return key;
    boolean flag = (mid - p + 1) % 2 == 0;
    if (flag) {
        if (m == key) p = mid + 1;
        else q = mid - 1;
    } else {
        if (m == key) q = mid - 2;
        else p = mid + 2;
    }
    return singleNonDuplicate(nums, p, q);
}

相关文章

  • C语言实战开发篇-5 一维数组

    数组 1.概念:数组是由单一类型的数据元素组成的有序数据集合,每个数据元素使用数组名和下标来表示。数组中的数据元素...

  • Python算法-情人节限定:在成双成对中寻找单身狗

    540. 有序数组中的单一元素[https://leetcode-cn.com/problems/single-e...

  • 一起学算法-540. 有序数组中的单一元素

    一、题目 LeetCode-540. 有序数组中的单一元素地址:https://leetcode-cn.com/p...

  • 56.有序数组中的单一元素

    day8:540. 有序数组中的单一元素[https://leetcode-cn.com/problems/sin...

  • Swift 数组

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

  • Swift--原生集合类型

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

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

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

  • 06 - 基础篇之数组

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

  • 数组

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

  • swift基础语法(六)——数组

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

网友评论

      本文标题:有序数组中的单一元素

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