day1第一章 数组part01

80 阅读1分钟

day1第一章 数组part01

二分查找

题目:leetcode.cn/problems/bi…

题解:

屏幕截图 2023-10-25 222200.png

为什么采用该算法(二分法)

1.给定数组nums 是有序数组

2.数组的所有元素是不重复的

盲点:

1.题目中 vector& ==nums==

a.长度为 ==nums==.size()

b.调用元素nums[i],类似数组

debug

1.int middle=left-(left+right)/2

这样写实际= left/2-right/2, 注意括号的问题,还是手算一下吧。

纠正为int middle=left+(right-left)/2;

移除元素

题目:leetcode.cn/problems/re…

题解:

屏幕截图 2023-10-25 222327.png

为什么采用该算法(双指针法)

时间复杂度为O(n),暴力算法为O(n^2)

盲点

1.库函数:vector.erase 删除数组中元素。

时间复杂度为O(n),非O(1)

因为数组的元素在内存地址中是连续的,所谓单独删除数组中的某个元素,

其实是覆盖:是将该元素后面的元素整体向前移

2.fast指针用于找新数组的元素并赋值给新数组

slow指针用于接收目标元素,指向新数组下标

debug

1.for(int fast=0;fast<nums.size[];fast++)

我服了,原来是()写成了[]