代码随想录算法训练营第一天| Leetcode 704. 二分查找、Leetcode 27. 移除元素

Part I : 数据结构

数组

  • 什么是数组:数组是一个存储在连续的内存空间中的相同类型数据组成的集合。
  • 数组的特性:随机访问、类型相同
  • 使用场合:非常广泛,但如果是非常庞大的数组对内存的要求很高,因为要一次性申请大量相应的连续内存地址用作存储。
    代码随想录算法训练营第一天| Leetcode 704. 二分查找、Leetcode 27. 移除元素_第1张图片

Part II: 相关算法

Leetcode 704. 二分查找

  • 解决问题:在数组中寻找一个给定的值(在下文称之为target),如果找到则返回对应的下标数字,否则返回-1.
  • 算法描述:设置left、right和middle指针,并设定初始值,从而不断更改搜索范围,使得算法复杂度为O(logn)
  • 算法难点:寻找区间可以设为左闭右开、左闭右闭、左开右闭其中一种,但不同类型的区间设置的初始值和重新赋值都要有所区别。先给出总结,最后贴出相应代码。
  • 区间和设置总结
    在这里插入图片描述
  • 代码:
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        # 左闭右闭区间中进行二分查找
        left = 0
        right = len(nums)-1
        while left<=right:
            mid = left+(right-left)//2
            if target<nums[mid]:
                right = mid-1
            elif target>nums[mid]:
                left = mid + 1
            else:
                return mid
        return -1
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        # 左闭右开区间中寻找
        left =0
        right = len(nums)

        while left<right:
            mid = left + (right-left)//2

            if target<nums[mid]:
                right = mid
            elif target>nums[mid]:
                left = mid + 1
            else:
                return mid
        return -1
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        # 左开右闭区间中进行二分查找
        left = -1
        right = len(nums)
        while left<right:
            mid = left+(right-left)//2
            if target<nums[mid]:
                right = mid
            elif target>nums[mid]:
                left = mid + 1
            else:
                return mid
        return -1

Leetcode 27. 移除元素

  • 解决问题:在数组中寻找一个给定的值(在下文称之为target),如果找到则删除并将其后的数据逐个往前覆盖,返回新数组长度.
  • 算法描述:设置fast、slow双指针,并设定初始值,fast指针指向新元素并不断和目标值对比,slow指针指向存放新元素的位置,使得算法复杂度为O(n)
  • 算法难点:对双指针的理解。
  • 代码部分(也可将while替换为for直到遍历结束即可)
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        fast=0
        slow=0
        size = (len(nums)-1)
        while fast <= size:
                if nums[fast]!=val:
                    nums[slow]=nums[fast]
                    slow += 1
                fast += 1
        return slow

今日打卡总结

在训练营的陪伴下开始了第一天刷leetcode,懒癌患者果然很需要这种带练服务啊~,作者也非常给力,讲得太好了

你可能感兴趣的:(代码随想录,算法,leetcode,python)