127、错误的集合

题目描述:
集合 S 包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。

给定一个数组 nums 代表了集合 S 发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。

示例 1:

输入: nums = [1,2,2,4]
输出: [2,3]
注意:

给定数组的长度范围是 [2, 10000]。
给定的数组是无序的。

还算容易的一道题目,基本上是一步跑出来了,跟之前的相对名次是一个思路,用一个数组存放其值,需要注意的是如果最大值不是nums.length,那么肯定是max丢失了,这点需要注意一下,其余没什么的,
看了一下取得max的值,这里可以直接将max设定为max.length+1嘛,怎么那么死板

class Solution {
    public int[] findErrorNums(int[] nums) {
       int result[] = new int[2];
		int max = nums[0];
		for (int i = 1; i < nums.length; i++) {
			if(nums[i] > max){
				max = nums[i];
			}
			
		}
		if(max != nums.length){
			result[1] = nums.length;
		}
		int []tem = new int[max+1];
		for (int i = 0; i < nums.length; i++) {
			tem[nums[i]] ++;			
		}
		for (int i = 1; i < tem.length; i++) {
			if(tem[i] == 2){
				result[0] = i;
			}
			if(tem[i] == 0){
				result[1] = i;
			}
		}
		
		
		
		
		
		return result; 
    }
}

在这里插入图片描述
瞬间就提高了2ms,我去计算一个max就耗费2ms看来要在细节处进行优化啊

排名靠前的代码,有点懵逼,个人觉得我的那个简单易懂

class Solution {
    public int[] findErrorNums(int[] nums) {
        /*hash数组:索引代表x-1的元素,数组值表示元素出现的次数,出现0次表示缺失数据,出现2次表示重复元素*/
      /*
        ArrayList<Integer> array=new ArrayList<>();
        HashMap<Integer,Integer> map=new HashMap<>();
        for(int num:nums){
            map.put(num,getOrDefault(num,0)+1);
        }
        for(int v:map.getValue){
            if(v==1){
                continue;
            }else if(v==2){
                array.add(map.getKey());
            }else{
                array.add(map.getKey());
            }
        }
        return array.toArray();
        */
        
        int m=nums.length;
        for(int i=0;i<m;i++){
            while(nums[i]!=i+1&&nums[nums[i]-1]!=nums[i]){
                swap(nums,i,nums[i]-1);
            }
        }
        
        for(int i=0;i<m;i++){
            if(nums[i]!=i+1){
                return new int[]{nums[i],i+1};
            }
        }
        return null;        
    }
    private void swap(int[] nums,int i,int j){
            int temp=nums[i];
            nums[i]=nums[j];
            nums[j]=temp;
        }
}

猜你喜欢

转载自blog.csdn.net/qq_34446716/article/details/85244402