448. Find All Numbers Disappeared in an Array
https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/
给出一列数,1 ≤ a[i] ≤ n,n是数组大小,有些数出现两次,有些数出现一次,找出在[1,n]中但是不在数列中的数。
不用额外的空间,时间复杂度O(n)
Example:
Input: [4,3,2,7,8,2,3,1] Output: [5,6]
解题思路:
一开始想的很简单
1、把原数组去重
2、构造一个[1,n]的数组,然后求个差集就行了
既然都是用python,set这个数据结构简直就是去重神器,直接set(nums)就去重
求差积的话list比较麻烦,set相减可以直接求差积
最后return要求是list数据结构,转回来就行
class Solution(object): def findDisappearedNumbers(self, nums): return list(set(range(1, len(nums) + 1)) - set(nums))
ps1.不要做一边append/remove这种操作一边遍历数组,常常会越界,宁愿复制出来一个再操作
ps2.在py2.7里面range()返回一整個list,xrange()返回一个生成器,后者在空间效率上高很多,大多数情况下无脑用xrange()就可以了。
py3就没这个问题,因为机智的让range()就是老xrange(),然后干掉了老range().