【从零开始的LeetCode-算法】540. 有序数组中的单一元素

给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。

请你找出并返回只出现一次的那个数。

你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。

示例 1:

复制代码
输入: nums = [1,1,2,3,3,4,4,8,8]
输出: 2

示例 2:

复制代码
输入: nums =  [3,3,7,7,10,11,11]
输出: 10

提示:

  • 1 <= nums.length <= 10^5
  • 0 <= nums[i] <= 10^5

我的解答

java 复制代码
class Solution {
    public int singleNonDuplicate(int[] nums) {
        int l = 0,r = nums.length - 1;
        // 因为要求时间复杂度为 O(log n) ,所以使用二分查找法
        while(l < r){
            int mid = (r - l) / 2 + l;
            if(mid % 2 != 0) mid--;
            if(nums[mid] == nums[mid + 1] ){
                l= mid + 2;
            } else{
                r = mid;
            }
        }
        return nums[l];
    }
}
相关推荐
XiaoLeisj28 分钟前
【优选算法 — 滑动窗口】最大连续1的个数 & 将 x 减到0的最小操作数
java·开发语言·算法·leetcode
YRr YRr30 分钟前
ubuntu20.04 ROS 临时修改功能包名并作一系列对应修改 (ubuntu20.04)
java·开发语言
sweetheart7-735 分钟前
LeetCode131. 分割回文串(2024冬季每日一题 4)
算法·深度优先·记忆化搜索·回溯·递归
岸榕.1 小时前
C语言 精选真题2
c语言·数据结构·算法
小馒头学python1 小时前
【机器学习】突破分类瓶颈:用逻辑回归与Softmax回归解锁多分类世界
人工智能·python·算法·机器学习·分类·回归·逻辑回归
一颗星星辰1 小时前
数据结构 | 题目练习第三章 | 有效的括号 | 用队列实现栈
java·linux·数据结构
♡喜欢做梦1 小时前
【数据结构】ArrayList的具体实现:简单的洗牌算法--Java
java·数据结构·算法·链表
passer__jw7671 小时前
【LeetCode】【算法】581. 最短无序连续子数组
算法·leetcode
HABuo1 小时前
【LeetCode】返回链表的中间结点、删除链表的倒数第 N 个结点
c语言·数据结构·c++·算法·leetcode·链表
G皮T2 小时前
【设计模式】行为型模式(一):模板方法模式、观察者模式
java·观察者模式·设计模式·模板方法模式·template method·行为型模式·observer