您的位置:首页 > 移动开发

leetcode-448 Find All Numbers Disappeared in an Array

2016-11-30 22:58 591 查看

中文描述

数组arr,长度为n,0<arr[i]<n,找出1~n中没有在数组中出现的数字,找出数组中没有出现的数据,时间复杂度为o(n),尽量不要浪费空间。


说明

从0<arr[i]<n,并且是数组,并且不要浪费空间,因此只能在原数组的基础上进行判断,而进行判断,需要明确:如何确定哪个数字出现了?如何确定是否出现?    1 通过数组的下标,确定数字,2 通过+,-号确定该数字是否出现。
遍历数组,元素值的绝对值减一作为下标,该下标对应的值改为负值。
遍历数组,元素值为整数的,说明改下标加一的数字没有出现。


java代码

public static List<Integer> findAllNumbersDisapperaredInAnArray(Integer[] nums){
List<Integer> list = new ArrayList<Integer>();
printArr(nums);
for(Integer n : nums){
nums[Math.abs(n)-1] = -Math.abs(nums[Math.abs(n)-1]);
printArr(nums);
}
for(int i=0;i<nums.length; i++){
if(nums[i] > 0){
list.add(i+1);
}
}
return list;
}


先临时记录自己的方法,刷完easy题之后再去看别人的方法,如果有更好的方法,会做补充,如果你有的话请留言,谢谢啦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode