268 Missing Number
原题ref: 268. Missing Number
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?
分析
这就是本科开始就反复讨论的方法,就是把正确的[1,n]个数加起来,这是是如果没有丢失数字,应该有的和,但是现在的和是给的arr里的所有数的和,两个的差就是丢的数。
比如给你[1,2,4],和是7,但是其实应该是[1,2,3,4]和是10,所以10-7=3,丢的数是3
新的知识点
就是Java 8的新特性,stream.
Collections的stream
- 首先是所有都自带stream的函数,以list为例,list.stream()就把一个list转成了stream
- 如果要做进一步操作,有sum(), filter(),forEach(). filter()接受
Predicate<T>
,比如filter(i -> i >= 3). list.forEach(a -> System.out.println(a)),注意这里的foreach只能读取不能改动
primitive type的array
- 把一个int[]转成
ArrayList<Integer>
, Intsteam.of(arr).boxed().collect(Collectors.toList()) - 比如我现在求和,Intsteam.of(arr).sum()就直接返回sum的值了
大概了解一下,以后需要进一步学习~^_^
用普通的方法写实这样的
public int missingNumber(int[] nums) {
int sum = 0;
int len = nums.length;
for(int num: nums) {
sum += num;
}
return len * (len + 1) / 2 - sum;
}
如果用了Stream一行就写完了
public int missingNumber(int[] nums) {
return nums.length * (nums.length + 1) / 2 - IntStream.of(nums).sum();
}