448. Find All Numbers Disappeared in an Array

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

O(n) Time O(n) Extra Space

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

O(nlogn) Time O(1) Extra Space

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

O(n) Time O(1) Extra Space

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

    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;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容