448. Find All Numbers Disappeared in an Array
来源:互联网 发布:浙江林业干部网络学堂 编辑:程序博客网 时间:2024/06/18 15:23
题意如下:
对于一个长度为n的数组,其内部元素均由1 ~ n组成,有些元素重复出现了2次,有些元素出现了1次,有些元素从未出现,求那些从未出现的元素。
要求:额外空间复杂度为O(1), 时间复杂度为O(n)
解法:
如果不考虑空间复杂度和时间复杂度,可以使用两层循环,统计每一个元素在数组中出现的次数,优点是好写,但是当数据量大时容易超时。
标志位法:用正负标志位,区分出现的元素和未出现的元素
从左向右遍历数组arr,假设当前遍历到 arr 的第 i 个元素,用一个变量 j 记录 | arr[i] | - 1,访问arr 的第 j 个元素,如果该元素为正,则把它变为负;否则不变。
最后,遍历一遍数组,如果某个位置上的元素为正,说明该位置从来没有被访问过。
图中,arr[4] 和 arr[5]上的值为正,表示5(5 = 4 +1)、6(6 = 5+1)从未在arr中出现过。
Python代码如下:
class Solution(object): def findDisappearedNumbers(self, nums): """ :type nums: List[int] :rtype: List[int] """ for i in range(len(nums)): j = abs(nums[i]) - 1 nums[j] = -abs(nums[j]) return [i + 1 for i in range(len(nums)) if nums[i] > 0]
0 0
- LeetCode-Array-448. Find All Numbers Disappeared in an Array
- [LC][Array] 448. Find All Numbers Disappeared in an Array
- Find All Numbers Disappeared in an Array
- Find All Numbers Disappeared in an Array
- Find All Numbers Disappeared in an Array
- Find All Numbers Disappeared in an Array
- Find All Numbers Disappeared in an Array
- Find All Numbers Disappeared in an Array
- Find All Numbers Disappeared in an Array
- Find All Numbers Disappeared in an Array
- Find All Numbers Disappeared in an Array
- Find All Numbers Disappeared in an Array
- Find All Numbers Disappeared in an Array
- Find All Numbers Disappeared in an Array
- 448. Find All Numbers Disappeared in an Array
- 448. Find All Numbers Disappeared in an Array
- 448. Find All Numbers Disappeared in an Array
- leetcode:448. Find All Numbers Disappeared in an Array
- Ubuntu中使用java命令时,显示该命令一包含在下列软件包中
- acl访问权限控制
- 如何设置google浏览器和火狐浏览器不保存缓存
- 读书笔记15 《好好学习》成甲
- javascript中的LHS与RHS
- 448. Find All Numbers Disappeared in an Array
- 基于7系列FPGA的DCI技术的应用
- Python 闭包及陷阱
- ai切片的完美解决方案
- 一步步学习电子维修汇总贴
- 你不知道的 Android WebView 使用漏洞
- 【敏捷开发每日一贴】:丰田生产系统TPS
- GCC的常识
- 1046. 划拳(15)