代码随想录Day-1|数组理论基础|Leetcode#704 二分查找 |#27 移除元素|

数组理论基础:

Highlight:

  1. 数组是存放在连续内存空间上的相同类型数据的集合
  2. 数组下标从0开始
  3. 内存空间地址连续(因此在删除或增添元素时,难免要移动其他元素地址)
  4. Python 中可以使用del 关键字 或者remove方法来删除数组元素

e.g.:

List = [1,2,3,4,5]
del List[2] # del List[obj], obj 为下标
print(List)
List = [1,2,4,5]

List = [1,2,3,4,5]
List.remove(3) #remove(obj), obj 为具体的值
print(List)
List = [1,2,4,5]

List = [1,2,3,4,5]
List.pop() # pop删除掉最后元素
print(List)
List = [1,2,3,4]

# 704 二分查找

        题目: n个整型数组nums(升序)和一个目标值 target, 在nums中搜寻 target值,若无目标值返回-1

思路: 

        左闭右开

while left < right, 条件 left = 0, right = len(nums)

        左闭右闭(在这种情况下 left,righth实际上等同于数组内元素的下标)

while left <= right, 条件 left = 0, right = len(nums) - 1

        center = left + ( right - left) // 2 # 防溢出

        left和right进行移动的时候 既可以依照center为依据进行左右区间的划分(草图)代码随想录Day-1|数组理论基础|Leetcode#704 二分查找 |#27 移除元素|_第1张图片

#27 移除元素

题目: 

        给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

思路:

        例子中给出了 将所需要移除数值等于val的元素 变成 0 依旧可以通过,因此可以通过:

        使用双指针遍历数组 当fast指针指到的元素不等于val时 将其值赋值给slow指针, slow指针接收到新赋值后移动至下一位置, 最后返回slow的值 即为移除数组的新长度

        slow = 0
        fast = 0
        for fast in range(len(nums)):
            if nums[fast] != val:
                nums[slow] = nums[fast]
                slow += 1
        return slow

你可能感兴趣的:(leetcode,算法,职场和发展)