LeetCode 第540题 有序数组中的单一元素

/*给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。[0,1,1,2,2,5,5]  示例 1:

输入: [1,1,2,3,3,4,4,8,8]  输出: 2  示例 2:

输入: [3,3,7,7,10,11,11]  输出: 10  注意: 您的方案应该在 O(log n)时间复杂度和 O(1)空间复杂度中运行。*/

/*
思路:  用二分法.mid 为偶数:  mid和哪边元素相同,单个的数就在哪边.mid 为奇数:  mid和哪边元素不同,单个的数就在哪边.为了简化代码,当mid为奇数时,mid--,转化为偶数.*/
 1 class Solution540 {
 2
 3   public int singleNonDuplicate(int[] nums) {
 4     int left = 0;
 5     int right = nums.length - 1;
 6     while (left < right) {
 7
 8       int mid = (left + right) >> 1;
 9       if ((mid & 1) == 1) {
10         --mid;
11       }
12       if (nums[mid] == nums[mid + 1]) {
13         left = mid + 2;
14       } else {
15         right = mid;
16       }
17     }
18     return nums[left];
19   }
20 }


原文地址:https://www.cnblogs.com/rainbow-/p/10257128.html

时间: 2024-08-30 01:07:51

LeetCode 第540题 有序数组中的单一元素的相关文章

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

有序数组中的单一元素 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数. 示例 1: 输入: [1,1,2,3,3,4,4,8,8] 输出: 2 示例 2: 输入: [3,3,7,7,10,11,11] 输出: 10 注意: 您的方案应该在 O(log n)时间复杂度和 O(1)空间复杂度中运行. 思路 取中间组坐标:mid = ( left + right ) / 2若 mid组中两元素相同 则唯一出现一次的元素必在 mid+1 组 到 right 组中(

540 Single Element in a Sorted Array 有序数组中的单一元素

给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数.示例 1:输入: [1,1,2,3,3,4,4,8,8]输出: 2 示例 2:输入: [3,3,7,7,10,11,11]输出: 10注意: 您的方案应该在 O(log n)时间复杂度和 O(1)空间复杂度中运行.详见:https://leetcode.com/problems/single-element-in-a-sorted-array/description/ C++: class Solution

leetcode 4. 移除有序数组中的重复元素 Remove Duplicates from Sorted Array

问题:Remove Duplicates from Sorted Array II 难度:medium Follow up for "Remove Duplicates": What if duplicates are allowed at most twice? For example, Given sorted array A = [1,1,1,2,2,3], Your function should return length = 5, and A is now [1,1,2,2

LeetCode:26删除有序数组中相同的数.(Python3)

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2. 你不需要考虑数组中超出新长度后面的元素.示例 2: 给定 nums = [0,0,1,1,1,2,2,3,3,4], 函数应该返回新的长度 5, 并且原数组 nums 的

[Swift-2019力扣杯春季决赛]1. 有序数组中的缺失元素

给出一个有序数组 A,数组中的每个数字都是 独一无二的,找出从数组最左边开始的第 K 个缺失数字. 示例 1: 输入:A = [4,7,9,10], K = 1 输出:5 解释: 第一个缺失数字为 5 . 示例 2: 输入:A = [4,7,9,10], K = 3 输出:8 解释: 缺失数字有 [5,6,8,...],因此第三个缺失数字为 8 . 示例 3: 输入:A = [1,2,4], K = 3 输出:6 解释: 缺失数字有 [3,5,6,7,...],因此第三个缺失数字为 6 . 提示

LeetCode 26 Remove Duplicates from Sorted Array (移除有序数组中重复数字)

题目链接: https://leetcode.com/problems/remove-duplicates-from-sorted-array/?tab=Description 从有序数组中移除重复数字,并且返回不重复数字的个数 遍历操作: 可以使用新的for循环 for (int n : nums){} 每次进行对比,并且更新第一个遇到不相等的元素的下标为i 对数组进行重新赋值操作 当数组长度大于1时,ans初值为1,当数组长度为0时,返回0 参考代码 : package leetcode_5

去掉有序数组中重复数字 原地 leetcode java (最简单的方法)

1.利用荷兰国旗的思路,每次记住最后一个位置,遇到一个不重复的数,放在它后面,代码很简单. Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with consta

【LeetCode】Find Minimum in Rotated Sorted Array 找到旋转后有序数组中的最小值

本文原作者:大便一箩筐 文章原地址:http://www.cnblogs.com/dbylk/p/4032570.html 原题: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). Find the minimum element. You may assume no duplicate exist

[LeetCode] Remove Duplicates from Sorted Array 有序数组中去除重复项

Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory. For example,Given input array A = [