成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

[Leetcode] Contains Duplicate 包含重復(fù)

rozbo / 1936人閱讀

摘要:代碼集合法復(fù)雜度時(shí)間空間思路同樣使用集合,但這次我們要維護(hù)集合的大小不超過(guò),相當(dāng)于是記錄一個(gè)寬度為的窗口中出現(xiàn)過(guò)的數(shù)字。

Contains Duplicate I

Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.

集合法 復(fù)雜度

時(shí)間 O(N) 空間 O(N)

思路

用一個(gè)集合記錄之前遇到過(guò)的數(shù)字,如果新的數(shù)字已經(jīng)在集合中出現(xiàn)過(guò)了,則說(shuō)明有重復(fù)。

代碼
public class Solution {
    public boolean containsDuplicate(int[] nums) {
        Set set = new HashSet();
        for(int i = 0; i < nums.length; i++){
            if(set.contains(nums[i])) return true;
            set.add(nums[i]);
        }
        return false;
    }
}
Contains Duplicate II

Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between i and j is at most k.

集合法 復(fù)雜度

時(shí)間 O(N) 空間 O(K)

思路

同樣使用集合,但這次我們要維護(hù)集合的大小不超過(guò)k,相當(dāng)于是記錄一個(gè)寬度為k的窗口中出現(xiàn)過(guò)的數(shù)字。

代碼
public class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        Set set = new HashSet();
        for(int i = 0; i < nums.length; i++){
            if(set.contains(nums[i])) return true;
            set.add(nums[i]);
            if(set.size()>k) set.remove(nums[i-k]);
        }
        return false;
    }
}
Contains Duplicate III

Given an array of integers, find out whether there are two distinct indices i and j in the array such that the difference between nums[i] and nums[j] is at most t and the difference between i and j is at most k.

二叉搜索樹(shù) 復(fù)雜度

時(shí)間 O(NlogK) 空間 O(K)

思路

要求判斷之前是否存在差值小于t的數(shù)字,我們需要知道在當(dāng)前數(shù)字x兩邊的數(shù)字,即最大的小于x的數(shù)字和最小的大于x的數(shù)字。二叉搜索樹(shù)有也有這樣的性質(zhì),它的左子樹(shù)的最右節(jié)點(diǎn)是最大的較小值,右子樹(shù)的最左節(jié)點(diǎn)是最小的較大值。這里我們用TreeSet這個(gè)類(lèi),它實(shí)現(xiàn)了紅黑樹(shù),并有集合的性質(zhì),非常適合這題。我們同樣也是維護(hù)一個(gè)大小為k的TreeSet,多余k個(gè)元素時(shí)把最早加入的給刪除。用ceiling()和floor()可以找到最小的較大值和最大的較小值。

代碼
public class Solution {
    public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
        TreeSet set = new TreeSet();
        for(int i = 0; i < nums.length; i++){
            int x = nums[i];
            // 最大的小于x的數(shù)字
            if(set.ceiling(x) != null && set.ceiling(x) <= t + x) return true;
            // 最小的大于x的數(shù)字
            if(set.floor(x) != null && x <= t + set.floor(x)) return true;
            set.add(x);
            if(set.size()>k) set.remove(nums[i-k]);
        }
        return false;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64497.html

相關(guān)文章

  • leetcode217.219.220 contains duplicate

    摘要:輸入一個(gè)整數(shù)數(shù)組,查看數(shù)組中是否存在重復(fù)的值。新的數(shù)組中數(shù)組的下標(biāo)為原數(shù)組的值,如果遍歷過(guò),則設(shè)置為。這里使用了作為實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu),通過(guò)堆的形式對(duì)集合中的數(shù)據(jù)進(jìn)行存儲(chǔ),從而我們可以通過(guò)某種順序獲得該集合中的所有順序。 217 Contains Duplicate Given an array of integers, find if the array contains any dup...

    tulayang 評(píng)論0 收藏0
  • leetcode 217 Contains Duplicate

    摘要:題目詳情輸入一個(gè)整數(shù)的數(shù)組,如果數(shù)組中的元素有重復(fù)的,那么返回,如果數(shù)組中的元素都是唯一的,那么返回思路這道題理解起來(lái)比較簡(jiǎn)單,首先還是要注意一下邊界條件異常輸入,對(duì)于長(zhǎng)度小于等于的數(shù)組做一個(gè)直接的返回對(duì)于這種要考慮數(shù)組中元素的重復(fù)的問(wèn)題, 題目詳情 Given an array of integers, find if the array contains any duplicate...

    philadelphia 評(píng)論0 收藏0
  • Leetcode PHP題解--D90 217. Contains Duplicate

    摘要:題目鏈接題目分析返回給定的數(shù)組中是否有元素重復(fù)出現(xiàn)。思路用和即可最終代碼若覺(jué)得本文章對(duì)你有用,歡迎用愛(ài)發(fā)電資助。 D90 217. Contains Duplicate 題目鏈接 217. Contains Duplicate 題目分析 返回給定的數(shù)組中是否有元素重復(fù)出現(xiàn)。 思路 用count和array_unique即可 最終代碼

    mingde 評(píng)論0 收藏0
  • [LeetCode] Contains Duplicate

    Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false ...

    褰辯話 評(píng)論0 收藏0
  • [LintCode/LeetCode] Contains Duplicate II

    Problem Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at ...

    894974231 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<