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(); }


results matching ""

    No results matching ""