LeetCode之尋找目標值

2021-10-05 14:20:33 字數 2694 閱讀 1342

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

暴力法:

解析:遍歷每個元素 x,並查詢是否存在乙個值與 target - x相等的目標元素。

**如下:

//暴力匹配

public

int[

]twosum

(int

nums,

int target)

;//返回所求的下標}}

}throw

newruntimeexception

("no two sum solution");

}

雜湊表:

解析:因為題中需要的是陣列中的元素和其索引,為了使它們一一對應,可以採用雜湊表來完成具體步驟是:

1.遍歷陣列 nums,i 為當前下標,每個值都判斷map中是否存在 target-nums[i] 的 key 值;

2.如果存在則找到了兩個值,如果不存在則將當前的 (nums[i],i) 存入 map 中,繼續遍歷直到找到為止;

3.如果最終都沒有結果則丟擲異常。

**如下:

public

int[

]twosum

(int

nums,

int target);}

map.

put(nums[i]

, i);}

throw

newillegalargumentexception

("no two sum solution");

}

詳細的解題過程可以參見:

leetcode第27題:給你乙個陣列 nums 和乙個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後陣列的新長度

拷貝覆蓋

解析:1.主要思路是遍歷陣列nums,每次取出的數字變數為num,同時設定乙個下標ans;

2.在遍歷過程中如果出現數字與需要移除的值不相同時,則進行拷貝覆蓋nums[ans] = num,ans自增1;

3.如果相同的時候,則跳過該數字不進行拷貝覆蓋,最後ans即為新的陣列長度。

**如下:

public

intremoveelement

(int

nums,

int val)

}return ans;

}

詳細的解題過程可以參見:

leetcode第35題:給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。

二分查詢:

1.先設定左側下標 left 和右側下標 right,再計算中間下標 mid;

2.每次根據 nums[mid] 和 target 之間的大小進行判斷,相等則直接返回下標,nums[mid] < target 則 left 右移,nums[mid] > target 則 right 左移;

3.查詢結束如果沒有相等值則返回 left,該值為插入位置。

**如下:

public

intsearchinsert

(int

nums,

int target)

else

}return left;

}

詳細的解題過程可以參見:

還有一種較為簡便的方法,因為只需要返回下標即可,因為是有序陣列,我們首先判斷目標值是否在陣列中,如果在,返回下標即可;如果不在並且大於最後乙個元素,就只需要在陣列長度上加1即可。

**如下:

public

intsearchinsert

(int

nums,

int target)

}return nums.length;

//如果target比陣列中所有的數都大if語句就進不去了,這時就要返回到陣列最後一位的後面

}

leetcode第112題:給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。

解析:二叉樹由於其特殊的結構,大部分的問題都可以使用遞迴來解決,關於遞迴的理解與分析可以參見遞迴的解題思路,這題也不列外。深度優先遍歷二叉樹,每深入一次,sum-根節點的值,當到達葉子節點的時候,判斷sum是否等於當前的節點值,如果等於,說明找到了,否則嘗試另外一條路徑。

**如下:

boolean ans =

false

;public

boolean

haspathsum

(treenode root,

int sum)

dfs(root, sum)

;return ans;

}public

void

dfs(treenode root,

int sum)

if(root.left == null && root.right == null)

}dfs

(root.left, sum - root.val)

;dfs

(root.right, sum - root.val)

;}

詳細的解題過程可以參見:

演算法之尋找二維矩陣中的目標值

編寫乙個高效的演算法來搜尋 m x n 矩陣 matrix 中的乙個目標值 target。該矩陣具有以下特性 每行的元素從左到右公升序排列。每列的元素從上到下公升序排列。示例 現有矩陣 matrix 如下 1,4,7,11,15 2,5,8,12,19 3,6,9,16,22 10,13,14,17...

子集和的目標值

題目描述 給定n個整數和目標值t,求某一非空子集使子集的元素的和與目標值之差的絕對值最小,元素可重複。輸入描述 第一行為整數n t。n為整數個數,t為目標值 第二行為n個整數ai。輸出描述 乙個整數,為差的最小值的絕對值。樣例輸入 5 91 1 1 4 17 樣例輸出 2 資料範圍及提示 1 n 1...

兩數之和等於目標值

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