农民代表
- 积分
- 5379
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2016-12-15
- 最后登录
- 1970-1-1
|
第一题和follow up, 第二题还用stack就行
- class Solution {
- public int missingNumber(int[] nums) {
- int sum = nums.length * (nums.length + 1) / 2;
- for (int num : nums) sum -= num;
- return sum;
- }
- }
- //如果是sorted的数组,在nlogn的时间做出
- class Solution {
- public int missingNumber(int[] nums) {
- Arrays.sort(nums);
- if (nums[0] != 0) return 0; //只有一个元素是[0], [1]二分无法解决要提前考虑检查头尾
- if (nums[nums.length -1] != nums.length) return nums.length;
- int l = 0, r = nums.length - 1;
- while (l < r) {
- int mid = l + (r - l) / 2;
- if (nums[mid] == mid) l = mid + 1; //相等说明左边没问题找右边
- else if (nums[mid] > mid) r = mid; //element > index说明左边不对, 不会出现nums[mid] < mid,因为少一个
- }
- return l; //最后停住的地方就是缺少的
- }
- }
复制代码
补充内容 (2018-9-30 06:30):
leetcode上array是 0开头的,这里改下mid+1即可 |
|