leetcode 1 多個數之和

2021-10-04 23:04:03 字數 2999 閱讀 9436

題目描述

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

解題步驟

採用雙指標法,先將陣列排序,計算左右指標對應位置之和,如果小於target,向右移動做指標,反之向左移動右指標。

**

public

int[

]twosum

(int

nums,

int target)

else

if(sum > target)

else

}for

(int i =

0; i < nums.length; i++)}

for(

int i = nums.length-

1; i >=

0;i--)}

return ret;

}

題目描述

給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。

注意:答案中不可以包含重複的三元組。

給定陣列 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合為:

[[-1, 0, 1],

[-1, -1, 2]]

解題步驟

(1)a + b + c = 0 ----》 a + b = -c

(2)與兩數之和類似,首先我們先確定兩個數的target也就是-c,我們遍歷陣列,依次讓每個元素的取反作為target。在遍歷該元素後面的所有元素,雙指標法找到兩數之和等於target的三元組。

(3)改題目有個關鍵的地方,我們要去重

(4)對target去重,target我們需要重複元素的第一次出現作為targte,其他的去重。比如:[-4,-1,-1,0,1,2],去重時我們需要使用第乙個-1,而去除第二個-1,因為存在三元組[-1,-1,2]滿足要求。所以每次都是nums[i]與其後面的元素nums[i-1]比較

(5)對於做右指標去重,我們可以找到最後乙個重複的位置,通過nums[left]==nums[left+1]和nums[right]nums[right-1],來查詢,在查詢前。必須要判斷leftright的時候,我們還要判斷前後元素是否相同,但是此時已經沒有後乙個元素了,會出現越界。所以要先判斷是否滿足left**

public list

>

threesum

(int

nums)

else

if(sum > target)

else}}

return alllist;

}

題目描述

給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。

例如,給定陣列 nums = [-1,2,1,-4], 和 target = 1.

與 target 最接近的三個數的和為 2. (-1 + 2 + 1 = 2).

解題步驟

這個題和三數之和類似,只是求出與target差的最小值

(1)a+b+c=sum 求min(sum-target)

(2)如果sum==target ,返回target

(3)如果sumtarget, right–

**

public

intthreesumclosest

(int

nums,

int target)

if(sum == target)

else

if(sum < target)

else}}

return retsum;

}

題目描述

給定乙個包含 n 個整數的陣列 nums 和乙個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d ,使得 a + b + c + d 的值與 target 相等?找出所有滿足條件且不重複的四元組

解題步驟

這和求三數之和類似。

(1)遍歷陣列,依次選擇乙個元素與target之差作為三數之和he

(2)遍歷剩餘的陣列,計算三元素之和是否等於he,採用雙指標進行遍歷

(3)最主要的是在去重,每一層都要去重

(4)對於最高層迴圈,去除i > 0 && nums[i]==nums[i-1]

(5)對於此高層迴圈,去除j>i+1 && nums[j]==nums[j-1]

(6)這裡都要先判讀j是否大於其初始的值,是因為我們不需要將第乙個元素去除重複,去除第乙個元素後面的重複

(7)對於雙指標迴圈去重與三數之和一樣

**:

public list

>

foursum

(int

nums,

int target)

else

if(sum < he)

else}}

}return alllist;

}

LeetCode 1 兩數之和

給定乙個整數數列,找出其中和為特定值的那兩個數。你可以假設每個輸入都只會有一種答案,同樣的元素不能被重用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 step 1 class solution object def tw...

leetcode 1 兩數之和

1.兩數之和 這道題和程式設計之法上面的題目有以下幾個不同 1 題目所給定的陣列是無序的,程式設計之法裡面是預設有序的 2 要求輸出原陣列的序號,如果用乙個結構體維護陣列下標,那麼需要o n 的空間,顯然不是最好的方法 3 題目中包含負數,之前想用數值直接表示陣列下標,陣列值為原來的真正陣列下標,但...

leetcode 1 兩數之和

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 class solution for int i 0 ...