数组理论基础
数组可以方便的通过下标索引的方式获取到下标下对应的数据
·数组下标都是从0开始的
·数组内存空间的地址是连续的
正是因为数组的在内存空间的地址是连续的,在删除或者增添元素的时候,就难免要移动其他元素的地址,数组的元素是不能删的,只能覆盖
python中二维数组内存也是连续的
704.二分查找
题目链接:https://leetcode.cn/problems/binary-search/
文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html
视频讲解:https://www.bilibili.com/video/BV1fA4y1o715
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
思路:
一看到题目感觉用暴力法很简单,但是因为这是一个升序数组,所以还有更优解
如果数组为有序数组,同时还强调数组中无重复元素,就可以考虑到是否要用二分法
二分查找顾名思义,将升序数组划分为前后两部分,通过中间值与target进行比较即可
class Solution:
def search(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums) - 1
while left <= right:
middle = (left + right) // 2
if nums[middle] < target:
left = middle + 1
elif nums[middle] > target:
right = middle - 1
else:
return middle
return -1
(因为之前用过C C++,在写python不是那么顺手,总是加上括号,忘记冒号,要改掉习惯
27.移除元素
题目链接:https://leetcode.cn/problems/remove-element/
文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html
视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。
示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。
思路:
按照代码随想录给的快慢指针方法
快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
慢指针:指向更新 新数组下标的位置
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
fast = 0
slow = 0
l = len(nums)
while fast < l:
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
fast += 1
return slow