LeetCode-540 有序数组中单一元素
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-element-in-a-sorted-array
题目描述
给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。
请你找出并返回只出现一次的那个数。
你设计的解决方案必须满足 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 <= 105
0 <= nums[i] <= 105
解题思路
本题难点在于限制了时间复杂度和空间复杂度,根据时间复杂度来看,很明显在诱导解题者使用二分法解题。
首先寻找规律,单一元素a的左边必然有偶数个元素,所以a的坐标必然是偶数,并且,a左边偶数坐标left的值均与left+1的值相同,右边偶数坐标right的值与right-1的值相同,所以,只需要找到这个分界点就是单一元素。
使用二分法,左边界left设置为0,右边界right设置为最大的偶数坐标,求出中间的偶数坐标mid(如果是奇数需要-1变成偶数坐标)判断是否nums[mid] == nums[mid + 1],如果相同,则a在mid的右边,并且mid不可能为单一元素,将left设置为mid + 2;否则,a可能在mid左边,也可能就是mid,所以将right设置为mid。
代码展示
class Solution {
public:
int singleNonDuplicate(vector<int>& nums) {
int iLeft = 0, iRight = nums.size() - 1, iMid = 0;
if(iRight % 2)
iRight--;
while(iLeft < iRight)
{
iMid = (iLeft + iRight) / 2;
if(iMid % 2)
iMid --;
if(nums[iMid] == nums[iMid + 1])
iLeft = iMid + 2;
else
iRight = iMid;
}
return nums[iLeft];
}
};
运行结果

LeetCode-540 有序数组中单一元素的更多相关文章
- LeetCode 540. 有序数组中的单一元素(Single Element in a Sorted Array) 42
540. 有序数组中的单一元素 540. Single Element in a Sorted Array 题目描述 每日一算法2019/6/14Day 42LeetCode540. Single E ...
- Java实现 LeetCode 540 有序数组中的单一元素(位运算入门)
540. 有序数组中的单一元素 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数. 示例 1: 输入: [1,1,2,3,3,4,4,8,8] 输出: 2 示例 ...
- Leetcode 540.有序数组中的单一元素
有序数组中的单一元素 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数. 示例 1: 输入: [1,1,2,3,3,4,4,8,8] 输出: 2 示例 2: 输入 ...
- LeetCode 5126. 有序数组中出现次数超过25%的元素 Element Appearing More Than 25% In Sorted Array
地址 https://leetcode-cn.com/contest/biweekly-contest-15/problems/element-appearing-more-than-25-in-so ...
- [LeetCode] 34. Find First and Last Position of Element in Sorted Array 在有序数组中查找元素的第一个和最后一个位置
Given an array of integers nums sorted in ascending order, find the starting and ending position of ...
- 【LeetCode】1464. 数组中两元素的最大乘积 Maximum Product of Two Elements in an Array (Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力 找最大次大 日期 题目地址:https://le ...
- [Leetcode]在排序数组中查找元素的第一个和最后一个位置
题目 代码 class Solution { public: vector<int> searchRange(vector<int>& nums, int target ...
- 【LeetCode每天一题】Find First and Last Position of Element in Sorted Array(找到排序数组中指定元素的开始和结束下标)
Given an array of integers nums sorted in ascending order, find the starting and ending position of ...
- 540 Single Element in a Sorted Array 有序数组中的单一元素
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数.示例 1:输入: [1,1,2,3,3,4,4,8,8]输出: 2 示例 2:输入: [3,3,7,7,10,1 ...
- [Swift]LeetCode540. 有序数组中的单一元素 | Single Element in a Sorted Array
Given a sorted array consisting of only integers where every element appears twice except for one el ...
随机推荐
- Vue快速上门(3)-组件与复用
VUE家族系列: Vue快速上门(1)-基础知识 Vue快速上门(2)-模板语法 Vue快速上门(3)-组件与复用 01.component组件 1.1.component基础知识 组件是可以复用的V ...
- 实施 GitOps 的三个关键步骤
GitOps 是一种自动化和管理基础架构和应用程序的模型,通过许多团队已经使用的相同 DevOps 最佳实践来形成的模型,例如版本控制.代码审查和 CI/CD 流水线.在实施 DevOps 时,我们找 ...
- Django路由层之路由分发 名称空间 虚拟环境 视图层之三板斧 JsonRsponse对象 request对象获取文件 FBV与CBV CBV源码剖析 模板层
目录 路由层之路由分发 路由层之名称空间 方式1:名称空间 方式2:别名不冲突即可 虚拟环境 pycharm创建虚拟环境 命令行形式创建虚拟环境 视图层之三板斧 HttpRsponse render ...
- bitlocker加密如何找密钥解锁
步骤1:在其他设备上登录[微软账号],地址:https://account.microsoft.com 步骤2:找到[自己的设备],查看[Bitlocker]密钥登录进去能看到[设备],找要解锁的那台 ...
- cs231n__4.1 Backpropagation and Neural Network
CS231n 4.1 Backpropagation 回顾: 两个损失函数: 优化的方法: 如何计算梯度: 用有限差分估计 直接计算偏导数(解析梯度) 今天,我们要学习如何计算任意复杂度的解析梯度 要 ...
- [数据结构]单向链表及其基本操作(C语言)
单向链表 什么是单向链表 链表是一种物理储存单元上非连续.非顺序的储存结构.它由一系列结点(链表中每一个元素称为结点)组成,结点可动态生成.每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存 ...
- 《Effective C++》资源管理章节
Item 13:以对象管理资源 关键的两个想法(这种方式其实在很多地方都可以看出影子,比如managing pool的模型): 1.获得资源后立刻放入管理对象(managing object):以对象 ...
- 可持久化栈学习笔记 | 题解 P6182 [USACO10OPEN]Time Travel S
简要题意 你需要维护一个栈,有 \(n\) 个操作,支持: 给定一个 \(x\),将 \(x\) 加入栈. 将一个元素出栈. 给定一个 \(x\),将当前栈回退到 第 \(x\) 操作前. 每一次操作 ...
- csrf跨站请求伪造、csrf校验策略、csrf相关装饰器、auth认证模块、auth认证相关模块及操作、扩展auth_user表
今日内容 csrf跨站请求伪造 钓鱼网站:模仿一个正规的网站 让用户在该网站上做操作 但是操作的结果会影响到用户正常的网站账户,但是其中有一些猫腻 eg:英语四六级考试需要网上先缴费,但是你会发现卡里 ...
- angular + ng-zorro 表格后台分页及排序功能实现,angular + ng-zorro 表格排序不起作用解决办法
angular + ng-zorro 表格排序不起作用是因为数据是从后端获取的,也是后端分页,所以要自己写排序啦~~~~ 举例:HTML <nz-table #basicTable nzBord ...