【桶】220.存在重復元素 III 【LeetCode】

220.存在重復元素 III 【LeetCode】

給你一個整數數組 nums 和兩個整數 kt。請你判斷是否存在 兩個不同下標ij,使得 abs(nums[i] - nums[j]) <= t,同時又滿足 abs(i - j) <= k

如果存在則返回 true,不存在返回 false

示例 1
輸入:nums = [1,2,3,1], k = 3, t = 0
輸出:true

示例 2
輸入:nums = [1,0,1,1], k = 1, t = 2
輸出:true

示例 3
輸入:nums = [1,5,9,1,5,9], k = 2, t = 3
輸出:false

提示
0<=nums.length<=2?1040 <= nums.length <= 2 * 10^40<=nums.length<=2?104
?231<=nums[i]<=231?1-2^{31} <= nums[i] <= 2^{31} - 1?231<=nums[i]<=231?1
0<=k<=1040 <= k <= 10^40<=k<=104
0<=t<=231?10 <= t <= 2^{31} - 10<=t<=231?1

思路:由于對于一個數 xxx,只要找到存在[x?t,x+t][x-t,x+t][x?t,x+t]內的數就算成功,于是采用桶的思想,桶的大小設為 t+1t+1t+1,此時桶內的極差為 ttt,即桶內的任意的兩個數的差都符合條件,因此若某個桶同時出現兩個及以上的元素即說明 truetruetrue,而對于數 xxx 既可向前找 ttt 個數,也可向后找 ttt 個數,因此還需觀察相鄰桶中的元素,相鄰桶若存在與該數的差值不大于 ttttruetruetrue,而由于某桶中出現兩個元素就直接成功了,因此相鄰桶要么沒有元素,要么只有一個元素(因此采用哈希表實現桶),因此只需比對常數級次數。而對于限制條件 kkk,只需模擬大小 k+1k+1k+1 的滑動窗口,從左到右遍歷數組,每次從右端加入新的數并且刪除最左端的數

官方題解

class Solution {
public:int getID(int x, long w) {return x < 0 ? (x + 1ll) / w - 1 : x / w;}bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {unordered_map<int, int> mp;int n = nums.size();for (int i = 0; i < n; i++) {long x = nums[i];int id = getID(x, t + 1ll);if (mp.count(id)) {return true;}if (mp.count(id - 1) && abs(x - mp[id - 1]) <= t) {return true;}if (mp.count(id + 1) && abs(x - mp[id + 1]) <= t) {return true;}mp[id] = x;if (i >= k) {mp.erase(getID(nums[i - k], t + 1ll));}}return false;}
};作者:LeetCode-Solution
鏈接:https://leetcode-cn.com/problems/contains-duplicate-iii/solution/cun-zai-zhong-fu-yuan-su-iii-by-leetcode-bbkt/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

代碼解釋

哈希映射函數

int getID(int x, long w) {return x < 0 ? (x + 1ll) / w - 1 : x / w;
}

在這里插入圖片描述
正數部分很好理解,主要討論負數部分

  1. 首先將負數都加1,由圖可以看到加1后負數的坐標恰好與右邊正數形成鏡像映射,于是對稱的兩邊的 ididid 互為相反數
  2. 為解決 +0+0+0?0-0?0ididid 沖突,于是將負數桶的 ididid 均減1

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/380154.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/380154.shtml
英文地址,請注明出處:http://en.pswp.cn/news/380154.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

遠控免殺專題12--Green-Hat-Suite免殺

0x01 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/meterperter/reverse_tcp模塊生成。 3、由于本機測試時只是安裝了360全…

英語基礎語法(八)-時態

英語中&#xff0c;動詞時態的用法是尤其復雜和富于變化的。經常通過動詞詞尾、組動詞等的變化表明動作發生時間的先后順序&#xff0c;即時態。總的來說&#xff0c;英語中的動詞時態分為 三個基本類型&#xff1a; 現在、過去和將來。動詞時態的變化常常伴隨著相應的表示時間…

Java PushbackInputStream markSupported()方法與示例

PushbackInputStream類markSupported()方法 (PushbackInputStream Class markSupported() method) markSupported() method is available in java.io package. markSupported()方法在java.io包中可用。 markSupported() method is used to check whether this stream supports …

面型對象 (接口與類的區別)

public class Demo4_Interface {public static void main(String[] args) {某女星 clown new 某女星();clown.潛規則();clown.關系();} }/*親爹只有一個&#xff0c;是單繼承;干爹可以有很多個&#xff0c;是多實現;*/ interface 某干爹{public void 關系();public void 潛規…

遠控免殺專題 13----zirikatu免殺

0x01 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/meterperter/reverse_tcp模塊生成。 3、由于本機測試時只是安裝了360全…

UML 的九種模型圖

1. UML的模型圖 UML 的模型圖能夠將被建模的系統的某一個方面的某一部分以圖形的方式表示出來&#xff0c;不同的視圖通過將多個不同的模型圖有機組合在一起就能夠描述系統模型的某方面的特征。UML的模型圖是有模型元素構成的&#xff0c;模型元素以圖標的形式直觀形象的表達…

【莫隊】區間眾數(Codeforces Round #716 (Div. 2) D)

D. Cut and Stick &#xff08;賽后補題&#xff09;借本題學習莫隊算法以及區間眾數的求法 題意&#xff1a;對于整型數組&#xff0c;每次詢問[L,R][L,R][L,R]區間問最少分為多少個子序列&#xff0c;使得每個子序列的眾數xxx的個數cntxcnt_xcntx?不大于 ?len2?\left \l…

如何正確使用SqlConnection

以前曾見過有人這樣寫代碼&#xff1a; public class Service1 : IService1{private SqlConnection conn new SqlConnection();public void Method1(){//do something with conn;}public void Method2(){//do something with conn;}public void Method3(){//do something with…

關系代數基本運算_關系代數的基本和附加運算

關系代數基本運算Definition 定義 Every DBMS must define a query language to enable users to access the data which is stored in the database. Relational Algebra is a procedural query language. It is used to query the database tables in order to access data…

遠控免殺專題 14 ---AVIator

0x01 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/meterperter/reverse_tcp模塊生成。 3、由于本機測試時只是安裝了360全…

面型對象 (包package)

面向對象(package關鍵字的概述及作用) 為什么要有包 將字節碼(.class)進行分類存放 包其實就是文件夾 代碼如下&#xff1a; package beyond.hjj;//在當前運行目錄下創建一個子目錄結構beyond\hjj&#xff0c;在子目錄下存放已經編譯成字節碼文件的clown.class類。 class c…

【Web開發】級聯查詢(Ajax/ jQuery/ Servlet)

實現級聯查詢 共有兩個下拉框&#xff0c;第一級為學院&#xff0c;第二級為學院開設的科目。 實現的功能為&#xff1a;當改變學院的選擇&#xff0c;第二級下拉框需變為對應學院開設的科目內容。 結果預覽&#xff1a; jsp頁面 <% page contentType"text/html;…

asp.net treeView綁定

這個東西不是什么復雜的東西&#xff0c; 幫著小兄弟寫個Demo, 實現個Binding public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Bind(); } } priv…

關于TOmcat的一些小小的知識

web.xml中的url-pattern和form 表單中的action是相同的。form 表單中的action聲明的并不是servlet的名字 例&#xff1a; <servlet> <servlet-name>welcome</servlet-name> <servlet-class>WelcomeYou</servlet-class> </servlet> <ser…

Java文件類字符串getAbsolutePath()方法(帶示例)

文件類字符串getAbsolutePath() (File Class String getAbsolutePath()) This method is available in package java.io.File.getAbsolutePath(). 軟件包java.io.File.getAbsolutePath()中提供了此方法。 This method is used to return the absolute path of the file object …

遠控免殺專題(15)-DKMC免殺

0x01 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/meterperter/reverse_tcp模塊生成。 3、由于本機測試時只是安裝了360全…

面向對象(靜態成員內部類的調用)

class beyond{public static void main(String []args){//外部類名.內部類名 對象名 外部類名.內部類對象(new 內部類名)/*Outer.Inner yy Outer.new Inner(); 類里面有個非靜態方法&#xff0c;需要new創建Inner對象;正常的形式是這樣的&#xff0c;但是我們習慣將new放在前…

SQL——以面向集合的思維方式來思考

本文來自&#xff1a;http://www.ituring.com.cn/article/details/472 為了以有趣的方式更好地幫助你形成面向集合的思維方式&#xff0c;我將給出自己最喜歡的游戲之一——集合。你可以在線玩這個游戲&#xff0c;網址是www.setgame.com/puzzle/set.htm&#xff0c;每天都會貼…

轉載: 統計圖控件NetCharting 和ZedGraph的比較

原文出處&#xff1a;http://hi.baidu.com/goga/blog/item/07b3024f61b8cd35aec3ab47.html最近考察了幾個統計圖表控件包&#xff0c;開源的有ZedGraph&#xff0c;Nplot等&#xff0c;但是相比之下還是ZedGraph強大&#xff0c;方便一些&#xff0c;其他的感覺還是半成品。收費…

【匯編語言】狀態標志符(CF/OF/SF/ZF)在運算(ADD/SUB/ADC/SBB)過程中的響應變化

目錄各類運算時狀態標志的響應變化標志符在各種ADD運算下的響應情況標志符在各種SUB運算下的響應情況借助標志符實現多位數之間運算ADC(add with carry)帶進位加法指令SBB(subtract with borrow)帶借位減法指令各類運算時狀態標志的響應變化 標志符具體含義CF&#xff08;Carr…