训练营打卡Day01
数组理论基础
数组是存放在连续内存空间上的相同类型数据的集合。
- 数组下标都是从0开始的
- 数组内存空间的地址是连续的
因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。
数组的元素不能删除,只能覆盖。
在C++中,二维数组在地址空间上是连续的。
刷题1:二分查找
思路:左右指针,每一次取中间下标与目标值进行比较,
- 等于目标值的话,直接返回结果
- 大于目标值的话,左指针等于中间值加一
- 小于目标值的话,右指针等于中间值减一
这道题虽然不是一刷了,但是还是出现了一些问题,就是在左右指针重新肤质的时候,直接把中间值赋值上去了,忘记加一或者减一。
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1;
while(left <= right)
{
int mid = left + (right - left) / 2;
if(nums[mid] == target)
{
return mid;
}
else if(nums[mid] > target)
{
right = mid-1;
}
else
{
left = mid+1;
}
}
return -1;
}
};
刷题2:移除元素
思路:遍历数组和一个下标解决问题
- 在遍历的过程中,下标对应值不等于目标值,小标值自增,重新在数组赋值遍历值。
- 等于目标值,就直接跳过。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int j = 0;
for(auto num: nums)
{
if(num != val)
nums[j++] = num;
}
return j;
}
};