[LeetCode]268. Missing Number
来源:互联网 发布:淘宝商品软文范例 编辑:程序博客网 时间:2024/06/10 06:04
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n
, find the one that is missing from the array.
For example,
Given nums = [0, 1, 3]
return 2
.
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
给的例子很明白了,就是说在一个连续的n个数的数组中,有一个数缺失,所以你要找到那个数。
我们可以想像如果没有那个缺的数,整个数组的长度应该为n+1,因为是从0开始。那么也就是说现在这个数组的长度是n。我最初的想法是一个loop从0到数组长度进行一个个比较,但因为这样会超出数组的长度,所以我们要想另一个办法。其实很简单做一个sum就好,然后把两个sum相减就能得到这样的一个数。
public class Solution { public int missingNumber(int[] nums) { int expec = 0; int actual = 0; for(int i =0;i<=nums.length;i++){ expec+=i; } for(int i=0;i<nums.length;i++){ actual+=nums[i]; } return expec - actual; }}这种方法比较简单,一般真实面试的时候面试官不会那么容易就让你过的,而且如果考虑数值比较大的话,int形可能就不能做到我们的要求了。这时有一个非常简便的方法,就是首先排序一下数组,让这个数组有序以后,我们要找一个数自然想到的就是二分法。有同学会问,那这样又排序又二分,时间复杂度不是要O(nlogn+logn)了吗,但如果你提前问一下面试官,这个数组是否排序过,这样不就行了?如果排序过那二分无疑是最好的。那这里二分的条件是什么呢?就是下标index是否小于当前的index的数,如果小于,说明缺失的数在左侧,如果等于说明缺失的数在右侧。代码如下:
public class Solution { public int missingNumber(int[] nums) { Arrays.sort(nums); int start = 0; int end = nums.length; int mid; while(start+1<end){ mid=start+(end-start)/2; if(nums[mid]!=mid){ end=mid; }else{ start=mid; } } if(nums[start]!=start){ return start; }else{ return end; } }}
0 0
- [leetcode] 268.Missing Number
- 【leetcode】268. Missing Number
- [leetcode] 268. Missing Number
- Leetcode 268. Missing Number
- 268. Missing Number LeetCode
- LeetCode 268. Missing Number
- 【LeetCode】268. Missing Number
- [LeetCode]268. Missing Number
- LeetCode *** 268. Missing Number
- 【leetcode】268. Missing Number
- leetcode-268. Missing Number
- LeetCode-268.Missing Number
- LeetCode 268. Missing Number
- [Leetcode] 268. Missing Number
- 【leetcode】268. Missing Number
- leetcode 268. Missing Number
- 【leetcode】268. Missing Number
- leetcode- 268. Missing Number
- 使用Emacs发送邮件
- 多线程相关 Thread、Runnable、Callable、Futrue类关系与区别
- shell脚本调试方法
- mac上安装MySQL5.7重置密码
- VMware虚拟机网络设置简述
- [LeetCode]268. Missing Number
- Jenkins RESTful API定制化
- 字符 深入理解java String 对象的不可变性
- URL详解 window.location的一系列方法
- luogu2007 魔方
- 51Nod-1686-第K大区间
- 9. Doctrine2
- 前端HTML<img>标签图像的属性和使用/图像img与背景background的区别
- Leetcode-54. Spiral Matrix