摘要:題目解答這一題有兩個思路,都是參考里寫出來的。是更加直接的用和來看有沒有在這個范圍內(nèi)存在的數(shù)。
題目:
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.
解答:
這一題有兩個思路,都是參考discussion里寫出來的。一個是bucket, 一個是TreeSet。
1.bucket是按照兩個數(shù)最多相差t這個性質(zhì),把每個數(shù)分到不一樣的bucket里,在k范圍內(nèi),如果有兩個數(shù)在同一個bucket里,那么說明這兩個數(shù)滿足條件;或者相鄰的bucket里存在一個數(shù),而且與這個數(shù)的差小于等于t,那這個數(shù)也滿足;其它都是超出范圍的。
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { if (k < 1 || t < 0) return false; Mapmap = new HashMap<>(); for (int i = 0; i < nums.length; i++) { long remappedNum = (long) nums[i] - Integer.MIN_VALUE; long bucket = remappedNum / ((long) t + 1); if (map.containsKey(bucket) || (map.containsKey(bucket - 1) && remappedNum - map.get(bucket - 1) <= t) || (map.containsKey(bucket + 1) && map.get(bucket + 1) - remappedNum <= t)) { return true; } if (map.entrySet().size() >= k) { long lastBucket = ((long) nums[i - k] - Integer.MIN_VALUE) / ((long) t + 1); map.remove(lastBucket); } map.put(bucket, remappedNum); } return false; }
2.TreeSet是更加直接的用floor和ceiling來看有沒有在這個范圍內(nèi)存在的數(shù)。
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { if (k < 1 || t < 0) return false; TreeSetvalues = new TreeSet (); for (int i = 0; i < nums.length; i++) { Integer floor = values.floor(nums[i] + t); Integer ceiling = values.ceiling(nums[i] - t); if ((floor != null && floor >= nums[i]) || (ceiling != null && ceiling <= nums[i])) { return true; } if (values.size() >= k) { values.remove(nums[i - k]); } values.add(nums[i]); } return false; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64989.html
摘要:輸入一個整數(shù)數(shù)組,查看數(shù)組中是否存在重復(fù)的值。新的數(shù)組中數(shù)組的下標(biāo)為原數(shù)組的值,如果遍歷過,則設(shè)置為。這里使用了作為實現(xiàn)的數(shù)據(jù)結(jié)構(gòu),通過堆的形式對集合中的數(shù)據(jù)進行存儲,從而我們可以通過某種順序獲得該集合中的所有順序。 217 Contains Duplicate Given an array of integers, find if the array contains any dup...
摘要:微信公眾號記錄截圖記錄截圖目前關(guān)于這塊算法與數(shù)據(jù)結(jié)構(gòu)的安排前。已攻略返回目錄目前已攻略篇文章。會根據(jù)題解以及留言內(nèi)容,進行補充,并添加上提供題解的小伙伴的昵稱和地址。本許可協(xié)議授權(quán)之外的使用權(quán)限可以從處獲得。 Create by jsliang on 2019-07-15 11:54:45 Recently revised in 2019-07-15 15:25:25 一 目錄 不...
摘要:如果不是,則在相鄰的兩個內(nèi)再找。如果相鄰的內(nèi)元素絕對值只差在以內(nèi),說明我們知道到了,返回為了保證,我們在時,刪除對應(yīng)的的元素都會落在里。為了解決這個問題,所有元素橫移。 Given an array of integers, find out whether there are two distinct indices i and j in the array such that th...
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 ...
摘要:代碼集合法復(fù)雜度時間空間思路同樣使用集合,但這次我們要維護集合的大小不超過,相當(dāng)于是記錄一個寬度為的窗口中出現(xiàn)過的數(shù)字。 Contains Duplicate I Given an array of integers, find if the array contains any duplicates. Your function should return true if any v...
閱讀 1272·2021-11-23 09:51
閱讀 2662·2021-09-03 10:47
閱讀 2244·2019-08-30 15:53
閱讀 2430·2019-08-30 15:44
閱讀 1383·2019-08-30 15:44
閱讀 1206·2019-08-30 10:57
閱讀 1936·2019-08-29 12:25
閱讀 1098·2019-08-26 11:57