代码随想录算法训练1day| 数组理论基础、704. 二分查找、27. 移除元素.。

704.二分查找

27.移除元素

代码随想录

二分查找

一个新手小白的自述,我最先想的是直接进行二分处理,但是却又不知道怎么写,凭着记忆去写,无耐啥也不会

然后看了提示后,才知道还有这么多细节性的问题

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的值就可以得出是数组的长度是多少了

总的来说,基础有点不扎实,后续一方面加深对语言语法的学习,另一方面多对算法题进行思考

猜你喜欢

转载自blog.csdn.net/weixin_53333922/article/details/126979584