Python练习打卡第一天

Leetcode704 and Leetcode 27

复习数组相关内容

数组的存储是连续且类型相同的,所以对数组进行增删操作时,其余元素地址也会发生变化

元素的地址是连续的(二维同)

但其实并不能删除它,只能进行修改他的值

Leetcode704 打卡:利用二分法查找数组中的target

左闭右开写法 

是left=mid+1 或 right=mid   

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        #1.根据左闭合区间来看
        left=0
        right=len(nums)-1
        mid=int((left+right)/2)
        while nums[mid]!=target and left<right:
            if nums[mid]<target:
                left=mid+1
            else:
                right=mid
            mid=int((left+right)/2)
        if nums[mid]==target:
            return mid
        else:
            return -1
左闭右闭写法
#修改right为right=mid-1
right=mid-1
Conclusion

利用二分法查找的前提是数组是有序且不重复的,要根据对区间的定义来写出区间的等式。

时间复杂度O(log n),空间复杂度O(1)

Leetcode27 打卡:移除数组中与要求元素相等的所有元素

要求空间复杂度O(1)

方法一:暴力搜索

整体思路:当数组中有与val相等的值时,将该数之后的部分整体向前移动。

注:移动时最后一位的下角标要记得随着变化 n-=1

时间复杂度:O(n2)   空间复杂度:O(1)

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        #方法一:暴力搜索
        n=len(nums)
        k=0
        i=0
        while i<n:
            if nums[i]==val:
                for j in range(i+1,n):
                    nums[j-1]=nums[j]
                n-=1#注意这个问题
                i-=1
            else:
                k+=1
            i+=1
        return k
 方法二:双指针

这一题的双指针指:

  • 一个快指针:遍历数组的
  • 一个慢指针:当快指针找到目标值的时候,慢指针固定不动,直到快指针指向的不是目标值时,才将此处的值改为当前快指针所指向的值

优点:将两个for循环省为一个 时间复杂度:O(n)

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        #方法二:双指针
        fast,slow=0,0
        n=len(nums)
        while fast<n:
            if nums[fast]!=val:
                nums[slow]=nums[fast]
                slow+=1
            fast+=1
        return slow

参考 代码随想录leetcode-master/README.md at master · youngyangyang04/leetcode-master · GitHub

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值