704 二分查找
鏈接:https://leetcode.cn/problems/binary-search/description/
給定一個 n 個元素有序的(升序)整型數組 nums 和一個目標值 target ,寫一個函數搜索 nums 中的 target,如果目標值存在返回下標,否則返回 -1。
思路:二分,關鍵點在于邊界條件處理,此處使用left<=right ,原因是我們在區間【Left,Right】之間查找,left==right是有意義的,除此之外,判斷分支后直接去掉mid,變為mid-1和mid+1,同樣保證左閉右閉區間。
### Python實現
class Solution:def search(self, nums: List[int], target: int) -> int:left = 0right = len(nums) - 1## 注意是小于等于while left <= right:mid = (left + right) //2 ## 整除 if nums[mid] < target:left = mid+1elif nums[mid] > target:right = mid-1else:return midreturn -1
27 移除元素
鏈接:https://leetcode.cn/problems/remove-element/description/
給你一個數組 nums 和一個值 val,你需要 原地 移除所有數值等于 val 的元素,并返回移除后數組的新長度。
不要使用額外的數組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數組。
元素的順序可以改變。你不需要考慮數組中超出新長度后面的元素。
思路:雙指針(快慢指針)設置左指針和右指針,最開始都在初始化的0位置,其中右指針在前’‘探路’',遇到非目標值的,則將該值賦值給左指針位置,同時左右指針均右移動一位,如果遇到目標值,則右指針右移,左指針不動,最終結果是左指針左邊的數字即為移除完所有目標值的數組。
Python實現:
class Solution:def removeElement(self, nums: List[int], val: int) -> int:l ,r = 0, 0for r, x in enumerate(nums):if x != val:nums[l] = xl += 1return l