Leetcode 704 Binary Search
- 题目链接: leetcode.com/problems/bi…
- 文档讲解:代码随想录 programmercarl.com
- 视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找
- 状态:有做出来
1. 第一想法
有以前做过的印象,所以就是有left和right,比较当中的数和target的大小。
class Solution:
def search(self, nums: List[int], target: int) -> int:
l = 0
r = len(nums)
while l < r:
mid = (l+r)//2
if target == nums[mid]:
return mid
elif target > nums[mid]:
l += 1
elif target < nums[mid]:
r -= 1
return -1
我一开始是(l+r)/2它提示我是float所以改成//
2. 看完后想法
完全没考虑过边界的问题,能过感觉是运气。其实做出来是有种背题感...因为逻辑上我之前只+-lr挺不合理的。
左闭右闭
class Solution:
def search(self, nums: List[int], target: int) -> int:
l = 0
r = len(nums)-1
while l <= r:
mid = l+(r-l)//2
if target > nums[mid]:
l = mid + 1
elif target < nums[mid]:
r = mid - 1
else:
return mid
return -1
左闭右开
class Solution:
def search(self, nums: List[int], target: int) -> int:
l = 0
r = len(nums)
while l < r:
mid = l+(r-l)//2
if target > nums[mid]:
l = mid + 1
elif target < nums[mid]:
r = mid
else:
return mid
return -1
3. 总结
考虑 while l < r这里是<还是<=,需要考虑区间是否合法。后面的是mid + 1还是mid,需要考虑它是否已经在区间中被检查过了。
Leetcode 27 Remove Element
- 题目链接:leetcode.com/problems/re…
- 文章讲解:代码随想录 programmercarl.com
- 视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素
- 状态:有做出来...吧
1. 第一想法
并想不出来什么二分。一开始我想的是把= val的都变成float('inf'),但是它总是会剩下一个不删,我不知道为什么。后来直接用了python的remove。一开始也会有问题...然后是循环的copy才过。
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
for i in nums[:]:
if i == val:
nums.remove(i)
return len(nums)
2. 看完后想法
原来说的尝试暴解是2个for。我一开始没想到再用一个for来向前覆盖。理解了数组是怎么删元素的。
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
s = 0
for f in range(len(nums)):
if nums[f] != val:
nums[s] = nums[f]
s += 1
return s
3.总结
删除数组并不是直接就删了,是往前覆盖。