91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

經典求和的問題有哪些

發布時間:2021-10-23 16:06:39 來源:億速云 閱讀:122 作者:iii 欄目:編程語言

這篇文章主要講解了“經典求和的問題有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“經典求和的問題有哪些”吧!

兩數之和

題目描述:

給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,并返回他們的數組下標。  
你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素不能使用兩遍。  

示例:

給定 nums = [2, 7, 11, 15], target = 9  
因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]  

題目很容易理解,即讓查看數組中有沒有兩個數的和為目標數,如果有的話則返回兩數下標,在這為大家提供兩種解法雙指針(暴力)法,和哈希表法,大家可以看一下。

哈希表法 

解析
哈希表的做法很容易理解,我們只需通過一次循環即可,假如我們的 target 值為 9,當前指針指向的值為 2 ,我們只需從哈希表中查找是否含有 7,因為9 - 2 =7 。如果含有 7 我們直接返回即可,如果不含有則將當前的2存入哈希表中,指針移動,指向下一元素。注:key 為元素值,value 為元素索引。  
動圖解析:
經典求和的問題有哪些  

是不是很容易理解,下面我們來看一下題目代碼。 

題目代碼:
經典求和的問題有哪些     

雙指針(暴力)法 

解析

雙指針(L,R)法的思路很簡單,L指針用來指向第一個值,R指針用來從L指針的后面查找數組中是否含有和L指針指向值的和為目標值的數。見下圖

例:綠指針指向的值為3,藍指針需要在綠指針的后面遍歷查找是否含有 target - 3  的元素即 5 - 3 = 2,若含有返回即可。

經典求和的問題有哪些    
題目代碼
經典求和的問題有哪些     

三數之和 

題目描述:

給你一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重復的三元組。  
注意:答案中不可以包含重復的三元組。  

示例:

給定數組 nums = [-1, 0, 1, 2, -1, -4],  
滿足要求的三元組集合為:[ [-1, 0, 1], [-1, -1, 2] ]  

這個題目算是對剛才題目的升級,剛才題目我們是只需返回一個例子即可,但是這個題目是讓我們返回所有情況,這個題目我們需要返回三個數相加為 0 的所有情況,但是我們需要去掉重復的三元組(算是該題的核心),所以這個題目還是挺有趣的,大家記得打卡呀。

哈希表法

解析

我們這個題目的哈希表解法是很容易理解的,我們首先將數組排序,排序之后我們將排序過的元素存入哈希表中,然后我們首先通過兩層遍歷,確定好前兩個數字,那么我們只需要哈希表是否存在符合情況的第三個數字即可,跟暴力解法的思路類似,很容易理解,但是這里我們需要注意的情況就是,例如我們的例子為[-2 , 1 , 1],如果我們完全按照以上思路來的話,則會出現兩個解,[-2 , 1 , 1]和[1 , 1, -2]。具體原因為,確定 -2,1之后發現 1 在哈希表中,存入。確定 1 ,1 之后發現 -2 在哈希表中,存入。所以我們需要加入一個約束避免這種情況,那就是我們第三個數的索引大于第二個數時才存入。

經典求和的問題有哪些  

上面這種情況時是不可以存入的,因為我們雖然在哈希表中找到了符合要求的值,但是 -2 的索引為 0 小于 2 所以不可以存入。

題目代碼
經典求和的問題有哪些     

多指針 

解析:

如果我們將上個題目的指針解法稱做是雙指針的話,那么這個題目用到的方法就是三指針,因為我們是三數之和嘛,一個指針對應一個數,下面我們看一下具體思路,其實原理很簡單,我們先將數組排序,直接 Arrays.sort() 解決,排序之后處理起來就很容易了。下面我們來看下三個指針的初始位置。

經典求和的問題有哪些  

初始情況見上圖,我們看當前情況,三數之和為  -3  ,很顯然不是 0 ,那么我們應該怎么做呢?

我們設想一下,我們當前的三數之和為 -3 < 0 那么我們如果移動橙色指針的話則會讓我們的三數之和變的更小,因為我們的數組是有序的,所以我們移動橙色指針(藍色不動)時和會變小,如果移動藍色指針(橙色不動)的話,三數之和則會變大,所以這種情況則需要向右移動我們的藍色指針,找到三數之和等于 0 的情況進行保存,如果三數之和大于 0 的話,則需要移動橙色指針,途中有三數之和為 0 的情況則保存。直至藍橙兩指針相遇跳出該次循環,然后我們的綠指針右移一步,繼續執行上訴步驟。但是這里我們需要注意的一個細節就是,我們需要去除相同三元組的情況,我們看下面的例子。

經典求和的問題有哪些  

這里我們發現 0 - 1 + 1 = 0,當前情況是符合的,所以我們需要存入該三元組,存入后,藍色指針向后移動一步,橙色指針向前移動一步,我們發現仍為 0 -1 + 1 = 0 仍然符合,但是如果繼續存入該三元組的話則不符合題意,所以我們需要去重。這里可以借助HashSet但是效率太差,不推薦。這里我們可以使用 while 循環將藍色指針移動到不和剛才相同的位置,也就是直接移動到元素 0 上,橙色指針同樣也是。則是下面這種情況,這樣我們就實現了去重,然后繼續判斷當前三數之和是否為 0 。

經典求和的問題有哪些  

動圖解析:

經典求和的問題有哪些  
 
題目代碼:
經典求和的問題有哪些     

四數之和 

題目描述

給定一個包含 n 個整數的數組 nums 和一個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d ,使得 a + b + c + d 的值與 target 相等?找出所有滿足條件且不重復的四元組。  
注意:  
答案中不可以包含重復的四元組。  

示例:

給定數組 nums = [1, 0, -1, 0, -2, 2],和 target = 0。  
滿足要求的四元組集合為:[ [-1,  0, 0, 1], [-2, -1, 1, 2], [-2,  0, 0, 2] ]  

我們已經完成了兩數之和和三數之和,這個題目應該就手到擒來了,因為我們已經知道這類題目的解題框架,兩數之和呢,我們就先固定第一個數 ,然后移動指針去找第二個符合的,三數之和,固定一個數,雙指針去找符合情況的其他兩位數,那么我們四數之和,也可以先固定兩個數,然后利用雙指針去找另外兩位數。所以我們來搞定他吧。 

多指針: 

解析:

三數之和是,我們首先確定一個數,然后利用雙指針去找另外的兩個數,我們在這個題目里面的解題思路是需要首先確定兩個數然后利用雙指針去找另外兩個數,和三數之和思路基本一致很容易理解。我們具體思路可以參考下圖。

這里需要注意的是,我們的  target  不再和三數之和一樣為  0 ,target  是不固定的,所以解題思路不可以完全照搬上面的題目。另外這里也需要考慮去重的情況,思路和上題一致。

經典求和的問題有哪些  

上圖則為我們查找到一個符合條件的四元組的情況,查找成功之后,下一步移動藍色指針,重新定義綠藍指針,繼續執行上面步驟。

經典求和的問題有哪些  

動圖解析:

經典求和的問題有哪些  
 
題目代碼:
經典求和的問題有哪些  
四數之和

感謝各位的閱讀,以上就是“經典求和的問題有哪些”的內容了,經過本文的學習后,相信大家對經典求和的問題有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大庆市| 台前县| 天全县| 广宁县| 横峰县| 屏南县| 泰兴市| 黎城县| 三原县| 洛川县| 拜泉县| 房山区| 胶州市| 江川县| 长丰县| 东源县| 大理市| 游戏| 盖州市| 南平市| 会东县| 山丹县| 长子县| 天气| 报价| 景泰县| 双鸭山市| 砀山县| 阿拉善盟| 清水河县| 涿州市| 竹北市| 襄城县| 外汇| 军事| 阳江市| 通辽市| 大竹县| 苏尼特右旗| 岳阳县| 和平区|