当前位置: 首页 > article >正文

Leetcode:540. 有序数组中的单一元素

题目

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

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

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

输入: nums = [1,1,2,3,3,4,4,8,8]
输出: 2

输入: nums = [3,3,7,7,10,11,11]
输出: 10

思路

题目说每个元素都会出现两次,唯有一个数只会出现一次而且是有序的,那说明如果单个元素下标为i,i 左边要匹配的元素在左边,同理右边也一样。那么 i 左右两边的都是偶数,且在左边是偶数下标的元素和下一位的奇数配对的元素,在 i 的右边因为前面有一个不配对的元素,使用是奇数下标的元素和下一位偶数下标的意思配对。题目要求O(log n),那可以使用二分查找。以偶数和下一位奇数配对的为准寻找。

代码

class Solution {
public:
    int singleNonDuplicate(vector<int>& nums) {
        int low = 0, high = nums.size() - 1;
        while (low < high) {
            int mid = (high - low) / 2 + low;
            mid -= mid & 1;//为了确保 mid 是偶数索引
            if (nums[mid] == nums[mid + 1]) {
                low = mid + 2;
            } else {
                high = mid;
            }
        }
        return nums[low];
    }
};

总结

  • 二分查找可以以数组其中变化的为准找
  • mid 是偶数索引 mid -= mid & 1

http://www.kler.cn/a/388335.html

相关文章:

  • 【数据库】PostgreSQL(持续更新)
  • WebRTC服务质量(12)- Pacer机制(04) 向Pacer中插入数据
  • 《机器学习》——利用OpenCV库中的KNN算法进行图像识别
  • Redis——数据过期策略
  • 2024基于大模型的智能运维(附实践资料合集)
  • IPD管理体系框架架应用实践
  • Kafka面试题 part-1
  • Unet++改进16:添加DoubleAttention||减少冗余计算和同时存储访问
  • 算法求解 -- (炼码 3853 题)检查是否有路径经过相同数量的0和1
  • 自动化测试工具Ranorex Studio(二十三)-等待UI元素-库超时
  • R和MATLAB及Python混合效应模型
  • 【Flume实操】复制:实时监听 NetCat 端口数据到本地文件系统和 HDFS 案例分析
  • 【工具变量】排污权交易政策试点DID(2000-2023)
  • 如何在Android中自定义property
  • 深入理解数据库事务:概念、特性与控制策略
  • Meta AI 新技术,赋予机器人 “触觉” 的革命
  • 快速克隆你的声音(音色)的网站
  • Mesh网格
  • [Docker#2] 发展历史 | Namespace环境隔离 | Cgroup资源控制
  • LeetCode题练习与总结:字符串中的第一个唯一字符--387
  • 基于 Python 的 Django 框架开发的电影推荐系统
  • 水电厂集水井排水泵自动化控制系统介绍
  • 爬虫策略规避:Python爬虫的浏览器自动化
  • 【C++】开源:ACE网络库环境配置与使用
  • scala的Set集合可变与不可变
  • Java 中使用Mockito 模拟对象的单元测试的快速示例