码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode试手:寻找缺失的数字

时间:2021-02-17 14:19:02      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:img   思路   好处   jpg   使用   number   技术   空间   复杂   

题目

给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。
找到所有在 [1, n] 范围之间没有出现在数组中的数字。
您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路1:

首先尝试利用hashset的不重复规则,生成一个hashset 1-n,遍历一边数组,存在的remove;

再把hashset加到返回的ArrayList中;

击败 12.36%,占用额外空间。

技术图片

思路2:研究官方思路:

  * 利用nums这个数组自带的序数来标记这个数字有没有出现过,
         * 1. 遍历从0到size序数的nums
         * 2. 假如第n序数的数字3出现了,那么把序数为3(3-1)的数字x改为-x;
         * 3. 假如发现第n序数的数字x为负,那说明这个位置被改动过了,以后不再改动序数为n的数字;
         * 4. 但是需要改动序数为n的负数字对应的那个序数的值,即它所指的值*/

结果:技术图片

 

仅是击败50%!

 

总结和感悟:

处理数组很容易数组越界,践行了多个危险操作,但是好处是快!

hashset没有越界的风险,好处是实现快,然而是运行速度慢。

不过也看到了自己和编程高手的差距。

理解半天也仅是击败50%的小伙伴。

 

LeetCode试手:寻找缺失的数字

标签:img   思路   好处   jpg   使用   number   技术   空间   复杂   

原文地址:https://www.cnblogs.com/huasheng2020/p/14401567.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!