二分查找
一个新手小白的自述,我最先想的是直接进行二分处理,但是却又不知道怎么写,凭着记忆去写,无耐啥也不会
然后看了提示后,才知道还有这么多细节性的问题
1、数组下标范围的开闭问题,是左闭右闭,还是左闭右开
2、在循环条件中,什么时候包含,什么时候不包含,为什么
3、python的基本用法
这是学了后面的小总结,若有问题还请批评指正。
二分算法早最开始是需要排序的,但题目中已给出顺序,就不需要单独排序。只需定义相关参数即可
num = [1,2,3,4,5,6,7] #已给定的数组
t = 4 #需要查找的值
left = 0 #数组的左下标
right = len(num)-1 #数组的右下标
然后需要中间值进行判断,t是否在这个区域内
while left <= right:
middle = left + (left + right) // 2 #得出中间值
if num[middle] < t: #中间值小于t
left = left + 1 #因为前面假定的是闭区间,所以这里middle>left,应+1
elif num[middle] > t: #中间值大于t
right = right - 1 #因为前面假定的是闭区间,所以这里middle<right,应-1
else:
print(middle) #得出结果
移除元素
对数组元素的删除,一般都是对值进行删除,因为数组的内存是连续且不能改变
采用双指针的方式进行操作,快指针指向不含所要求元素的元素,而慢指针则指向数组的下标
nums = [1,5,5,5,5,5,0,9,8] #先创建数组并添加数据
val = 5 #需要删除的值
if nums is None or len(nums)==0: #判断条件是否满足
print(0)
l=0 #快指针的值
r=len(nums)-1 #数组的下标也就是慢指针的值
然后就要通过循环赋予新值
while l<r:
while(l<r and nums[l]!=val): #快指针
l+=1 #若不等于预定值就加一,否则不变
while(l<r and nums[r]==val): #慢指针
r-=1 #若等于预设值,就将下标左移一位
nums[l], nums[r]=nums[r], nums[l]
print(nums) #输出新的数组
最有通过输出l的值就可以得出是数组的长度是多少了
总的来说,基础有点不扎实,后续一方面加深对语言语法的学习,另一方面多对算法题进行思考