玖叶教程网

前端编程开发入门

寻找缺失的一个数字

编号0到n的n+1个数,然后删除一个 组成n个数据 寻找缺失这一个元素

Given an array containing ndistinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.

https://leetcode.com/problems/missing-number/description/

Example 1

Input: [3,0,1]Output: 2

Example 2

Input: [9,6,4,2,3,5,7,0,1]Output: 8

  • 题目理解(必须读三次 彻底理解含义 条件是什么,问题是什么)

第一次理解:

给你一个数组 大小是n,然后寻找缺失一个数,这不是有题目有问题吗一个都不缺?

第二次理解:

条件:

给你一个数组,含有n个元素,每个元素都不重复,对每元素o到顺编号 大小必然是n+1个 现在大小是n个说明少了一个元素。

第三次理解:

给你 编号0到n的n+1个数,然后删除一个 组成n个数据 寻找缺失这一个元素

  • 分类:

鸽巢原理:

10只鸽子放进9个鸽笼,那么一定有一个鸽笼放进了至少两只鸽子

鸽巢原理

如果不允许重复 必须丢失其中一个有编号的鸽子

分析1

首先想到是:

如果是有序连续数据,([0,1,3] n=3,缺少 2)

遍历当有元素是x,下个元素是y,两者相差必然是1 如果不是,x+1就是缺失元素

如果到了最后一个元素缺失就是元素n (例如【0,1,2,3 】 n=4 缺少 4 )

步骤

  1. 现在是无序的,数值大小n确定了

  2. 通过数据公式计算 miss=(1+n)*n/2-sum

public int missingNumber(int[] nums)

{

int n = nums.length;

int sum = 0;

for (int i = 0; i < n; i++)

{

sum += nums[i];

}

return (1 + n) * n / 2 - sum;

}

空间复杂度0 (1)

时间复杂度:0(n)

优化:

1 每个元素+1 变成下一个元素,通过异或消除重复数据也可以 时间复杂度没变。

2 题目变形:--折半查找

1 Find the missing number in a sorted array of limited range

https://www.geeksforgeeks.org/find-missing-number-sorted-array-limited-range/

2 find-lost-element-from-a-duplicated-array

https://www.geeksforgeeks.org/find-lost-element-from-a-duplicated-array/

寻找缺失2个元素 Find Two Missing Numbers

Given an array of n unique integers where each element in the array is in range [1, n].

The array has all distinct elements and size of array is (n-2).

Hence Two numbers from the range are missing from this array.

Find the two missing numbers.

Examples:

Input : arr[] = {1, 3, 5, 6}, n = 6

Output : 2 4

Input : arr[] = {1, 2, 4}, n = 5

Output : 3 5

Input : arr[] = {1, 2}, n = 4

Output : 3 4

  • 题目:

连续的数字 从1到n ,缺失了2个数 从n变成 n-2 寻找缺失的2个数

知道:已经数组大小n和本来大小n+2,求缺少2个

分析:

假设缺失数值 x,和y

用上面题目的思路 方法不能直接定位缺失那2个元素 n(n+1)/2-sum =x+y

Input : 1 3 5 6, n = 6

Sum of missing integers = n*(n+1)/2 - (1+3+5+6) = 6.

(舍)

首先想到是

构建一个1到n+2数组 S,遍历该数值S 如果在原来数值A不存在 那就是结果

空间复杂度0 (N)

时间复杂度:0(N*n)

(舍)

因为无顺 也不能 强行用折半查找

没思路了进入胡同

重新看你思路

网上给出答案是数据公式计算 https://www.geeksforgeeks.org/find-two-missing-numbers-set-1-an-interesting-linear-time-solution/ 这个没太看懂 是规律

XOR

https://www.geeksforgeeks.org/find-two-missing-numbers-set-2-xor-based-solution/

好吧没看明白

类似题寻找重复题目

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言