题目:

给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。

找到所有在 [1, n] 范围之间没有出现在数组中的数字。

您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。

示例:

输入:
[,,,,,,,] 输出:
[,]

<分析>

  1.     1 ≤ a[i] ≤ n ( n = 数组大小 )

  2.     数组中的元素一些出现了两次,另一些只出现一次

解法一:

  可以考虑将数组a中的出现的元素k放到数组a第k个位置,即a[k-1]单元.。 如此,数组a中下标+1(i+1)与元素a[i]不相等则代表i+1未出现过。

函数如下:

    public static List<Integer> findDisappearedNumbers(int[] nums) {
int i, k;
List<Integer> L = new ArrayList<>(); for(i = 0; i < nums.length; i++){
if(nums[i] != nums[nums[i] - 1]){
k = nums[i];
nums[i] = nums[k - 1];
nums[k - 1] = k;
i--;
}
}
for(i = 0; i < nums.length; i++){
if(i != nums[i] - 1)
L.add(i+1);
} return L;
}

 解法二:

  1-n的数字可能出现也可能不出现,可以想一种方法标记两种状态。数组中元素均大于0,考虑如果数组a[]中包含k,则可以将a[k-1]取-|a[k-1]|。这样遍历完数组a[]后,a[i]>0,则代表i+1未出现。

函数如下:

public static List<Integer> findDisappearedNumbers(int[] nums) {
int i, k;
List<Integer> L = new ArrayList<>(); for(i = 0; i < nums.length; i++){
k = nums[i] > 0 ? nums[i] : -nums[i];
nums[k - 1] = nums[k - 1] > 0 ? -nums[k - 1] : nums[k - 1]; } for(i = 0; i < nums.length; i++){
if(nums[i] > 0)
L.add(i+1);
} return L;
}

解法三:

  与解法二类似,可以采用其他方式标记。若k在数组a[]中出现,可以让a[k-1]加上n。这样,如果a[i]<=n则代表i+1未出现。

代码如下:

public static List<Integer> findDisappearedNumbers(int[] nums) {
int i, k;
List<Integer> L = new ArrayList<>(); for(i = 0; i < nums.length; i++){
k = nums[i] % nums.length;
if(k == 0)
k = nums.length;
nums[k - 1] += nums.length;
} for(i = 0; i < nums.length; i++){
if(nums[i] <= nums.length)
L.add(i+1);
} return L;
}

LeetCode-----算法448.找到所有数组中消失的数字的更多相关文章

  1. 力扣(LeetCode)448. 找到所有数组中消失的数字

    给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您能在不使 ...

  2. Java实现 LeetCode 448 找到所有数组中消失的数字

    448. 找到所有数组中消失的数字 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间 ...

  3. Leetcode 448.找到所有数组中消失的数字

    找到所有数组中消失的数字 给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现 ...

  4. [LeetCode] 448. 找到所有数组中消失的数字(思维)

    题目 给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您 ...

  5. [LeetCode] 448. 找到所有数组中消失的数字 ☆

    描述 给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您 ...

  6. 448 Find All Numbers Disappeared in an Array 找到所有数组中消失的数字

    给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次.找到所有在 [1, n] 范围之间没有出现在数组中的数字.您能在不使用 ...

  7. 【leetcode 简单】 第一百零八题 找到所有数组中消失的数字

    给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您能在不 ...

  8. [Swift]LeetCode448. 找到所有数组中消失的数字 | Find All Numbers Disappeared in an Array

    Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...

  9. Leetcode448.Find All Numbers Disappeared in an Array找到所有数组中消失的数字

    给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您能在不 ...

随机推荐

  1. [python]pip 版本9.0.1升级到10.0.1故障解决办法

    问题背景: 在做android自动化时使用到第三方库uiautomator时,提示要安装,但安装该uiautomator库时提示当前的pip版本偏低,需要安装10.0.1版本方可.但在升级到升级到该版 ...

  2. 解决Windows Server2008 R2中IE开网页时弹出阻止框

    使用Windows Server2008,用IE打开网站时会弹出“Internet Explorer增强安全配置正在阻止来自下列网站的此应用程序中的内容”的对话框.如下图所示: 2011-10-14_ ...

  3. 水壶-[Kruskal重构树] [解题报告]

    水壶 本来从不写针对某题的题解,但因为自己实在是太蠢了,这道题也神TM的恶心,于是就写篇博客纪念一下 H水壶 时间限制 : 50000 MS 空间限制 : 565536 KB 评测说明 : 2s,51 ...

  4. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  5. JavaScript无阻塞加载具体方式

    将脚本放在底部.\还是放在head中,用以保证在js加载前,能加载出正常显示的页面.\<script>标签放在\前 成组脚本:由于每个\<script>标签下载时阻塞页面解析过 ...

  6. MetaMask/Website

    https://github.com/MetaMask/Website 将这个包下载下来之后运行npm install出现下面的问题 gyp: No Xcode or CLT version dete ...

  7. mysql刚启动就停止是什么原因

    1.找到mysql安装目录,将其配置文件my.default.ini改名为my.ini,并且将my.ini移至bin目录下. 2.启动命令行,将目录切换到mysql安装目录的bin目录下.3.接下来, ...

  8. 分享一个excel根据文件超链接获取链接文档的最后更新时间

    #获取制定单元格内超链接对应的链接地址Sub geturi() For Each cell In Range("E3:E43") If cell.Hyperlinks.Count ...

  9. Python2.7-bz2

    bz2模块,提供 bz2 压缩的接口,一般使用 BZ2File 类来完成操作,操作的文件是后缀为“.bz2”的文件 1.模块方法 bz2.compress(data[, compresslevel]) ...

  10. Windows10安装vmware和centos7

    1. 下载vmware安装包 地址(vmware版本:vmware workstation 14):http://xzc.197746.com/vmware-workstation-full1413. ...