448. Find All Numbers Disappeared in an Array

給一串在區(qū)間1~n內的數(shù)字array,這些數(shù)字出現(xiàn)了0次,1次或2次,找出出現(xiàn)了0次的那些數(shù)字。

O(n) Time O(n) Extra Space

用一個boolean [] map來記錄數(shù)字是否重復。

O(nlogn) Time O(1) Extra Space

sort(),然后在gap處把缺少的加到結果里。

O(n) Time O(1) Extra Space

其實我一直以為每個數(shù)字出現(xiàn)兩次是突破口,但是這題的突破口是所有數(shù)字都是positive integer,這樣你就可以把數(shù)字映射回它本身對應的那個slot,而且只要用正負號來做標記。注意不能漏了 if(nums[Math.abs(nums[i])-1]>0)這句否則出現(xiàn)兩次的數(shù)字對應的slot的標記會被取消。

    public List<Integer> findDisappearedNumbers(int[] nums) {
        List<Integer> res = new ArrayList<>();
        if(nums == null || nums.length == 0) return res;
        for(int i = 0 ; i < nums.length ; i ++){
            if(nums[Math.abs(nums[i])-1]>0)
                nums[Math.abs(nums[i])-1] = -nums[Math.abs(nums[i])-1];
        }
        
        for(int i = 0 ; i < nums.length ; i ++){
            if(nums[i]>0){
                res.add(i+1);
            }
        }
        return res;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容