数组中消失的数--------------------------Find All Numbers Disappeared in an Array448

本文主要是介绍数组中消失的数--------------------------Find All Numbers Disappeared in an Array448,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

Find all the elements of [1, n] inclusive that do not appear in this array.

Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.

Example:

Input:
[4,3,2,7,8,2,3,1]Output:
[5,6]
// 因为Array中的元素是从1到n,所以减1将是0到n-1,它们是数组的索引。
//以输入[4.3.2.7.8.2.3.1]为例,通过减去1,它变为[3.2.1.6.7.1.2.0],这是一个索引数组。
//第一次迭代
//当i = 0时,它将nums [3]标记为负数,数组变为[4.3.2.-7.8.2.3.1]。
//当i = 1时,它将nums [2]标记为负数,数组变为[4.3.-2.-7.8.2.3.1]。
//当i = 2时,它将nums [1]标记为负数,数组变为[4.-3.-2.-7.8.2.3.1]。
//当i = 3时,它将nums [6]标记为负数,数组变为[4.-3.-2.-7.8.2.-3.1]。
//...
//...
//当i = 6时,它将nums [0]标记为负数,数组变为[-4.-3.-2.-7.8.2.-3.-1]。
//
//对于第二次迭代
//找到nums [4] = 8和nums [5] = 2> 0;
//这意味着4和5不在索引数组[3.2.1.6.7.1.2.0]中。
//通过添加1,5和6不在输入[4.3.2.7.8.2.3.1]
//返回[5.6]public static void main(String[] args) {int []nums= {4,3,2,7,8,2,3,1};List<Integer> findDisappearedNumbers = findDisappearedNumbers(nums);for(Integer num: findDisappearedNumbers) {System.out.print(num+" ");}}public  static List<Integer> findDisappearedNumbers(int[] nums) {List<Integer> list=new ArrayList<>();for(int i=0;i<nums.length;i++) {int index=Math.abs(nums[i])-1;if(nums[index]>0) {nums[index]=-nums[index];}  		}for(int i=0;i<nums.length;i++) {if(nums[i]>0) {list.add(i+1);}}return list;}

 

这篇关于数组中消失的数--------------------------Find All Numbers Disappeared in an Array448的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/491774

相关文章

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没