今天是我第一天打卡算法训练营,希望自己能一直坚持下去
LeetCode 704.二分查找
题目链接:
小菜鸡一枚,想了很久,自己把左闭右闭的区间写出来了,写完又去看的视频讲解,感觉更清晰了,主要知识点就是区间对应了循环和if判断条件,今晚再看看另外两道34.搜索插入位置
和35.在排序数组中查找元素的第一个和最后一个位置
自己的代码也放在这
class Solution:
def search(self, nums: List[int], target: int) -> int:
start = 0
end = len(nums) - 1
binary = (start+end) // 2
while(start <= end):
if nums[binary] < target:
start = binary + 1
binary = (start+end) // 2
elif nums[binary] > target :
end = binary - 1
binary = (start+end) // 2
else:
return binary
return -1
LeetCode 27. 移除元素
题目链接:
这道题目想的时间不是很久,因为暴力法比较好想出来,先贴我自己的代码
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
start = 0
while(start <len(nums)):
if nums[start] != val:
start += 1
else:
past = start
while (nums[start] == val):
start += 1
if (start == len(nums)):
return past
temp = nums[past]
nums[past] = nums[start]
nums[start] = temp
start = past +1
感觉我是分析对象搞错了,把要移除的元素当作分析对象,相当于是只用了一个指针去循环遍历,past指针完全没有被用到,或者是我代码本身有点问题,不应该用while循环用for循环更好,我的思路是把所有移除元素全部移到最后,当已经全部都被移除后,返回最后一个做了移除操作元素的下标
听了卡哥的讲解后,明显感觉豁然开朗,分析对象应该是要保留的元素而不是要移除的元素。快慢指针的思想还不是很熟练,但是一下就把我在分析的时候遇到的问题解决了。
第一天顺利打卡,希望接下来能越做越顺手,加油!