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

二分查找------练习2

1. 题目

在这里插入图片描述

2. 思路和题解

对题干进行分析,在nums数组中,每个元素都会出现两次,并且只有一个数会出现一次,那么这个数组长度一定是奇数。其次,这个数组是有序的数组,那么如果一个元素出现两次,那么这两个元素必然相邻。
然后题目要求只出现一次的那个数,并且要求我们的时间复杂度为O(log n),这就启发我们可以用二分查找的思路去思考这道题目。
根据这个思路,如果我们所求的mid是奇数,则将其减1,以确保mid和mid+1是一对元素,如果mid和mid+1位置的元素是相等的,那么就说明单独的元素在右侧,这个时候将left更新为mid+2,如果元素不相等,单独的元素要么在左侧,要么就是此时mid位置对应的元素,这个时候将right更新为mid,最后当left和right相等时,那么我们就找到了单独的元素,然后进行输出即可。
整体代码如下:

class Solution {
    public int singleNonDuplicate(int[] nums) {
        int left = 0;
        int right = nums.length - 1;
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (mid % 2 == 1) {
                mid--;
            } 
            if (nums[mid] == nums[mid + 1]) {
                left = mid + 2;
            } else {
                right = mid;
            }
        }
        return nums[left];
    }
}

相关文章:

  • Numpy 简单学习【学习笔记】
  • 基于CNN的FashionMNIST数据集识别6——ResNet模型
  • Python 异步编程
  • MIT6.5840 lab3A
  • llama源码学习·model.py[7]Transformer类
  • gcc -fPIC 选项
  • 浅谈Qt事件子系统——以可拖动的通用Widget为例子
  • AI 驱动视频处理与智算革新:蓝耘MaaS释放海螺AI视频生产力
  • one-hot标签详解
  • 6.4考研408数据结构图论核心知识点深度解析
  • DHCPv6 Stateless Vs Stateful Vs Stateless Stateful
  • RAG文本分块的魔法与智慧:传统分块与延迟分块,选哪个?
  • 程序代码篇---Pyqt的密码界面
  • Jetpack Compose 选项卡控件实现
  • 数据结构-二叉树
  • 【Linux 维测专栏 2 -- Deadlock detection介绍】
  • NIO ByteBuffer 总结
  • WPF控件DataGrid介绍
  • Ubuntu常用命令大全 | 零基础快速上手指南
  • Python环境安装
  • 上海优化营商环境十大攻坚突破任务中,为何第一项是实施世行对标改革?
  • 小米回应SU7Ultra排位模式限制车辆动力:暂停推送更新
  • 成立6天的公司拍得江西第三大水库20年承包经营权,当地回应
  • 上海明后天将迎强风大雨,陆地最大阵风7~9级
  • 潘功胜:央行将创设科技创新债券风险分担工具
  • 山东滕州市醉驾交通事故肇事人员已被刑拘