0基础力扣 DAY1
数组基础
**数组是存放在连续内存空间上的相同类型数据的集合。**C++需要注意区分vector和array。vector是顺序容器,但内存空间大小可以动态改变;而array的内存大小是固定不变的(vector底层是使用array实现的)。
数组下标从0开始,且对于C++,二维数组在空间上也是连续的(不同语言存储方式可能不同)。
704. 二分查找
经典二分查找算法,注意while循环判断以及每次二分的位置即可。
代码如下:
class Solution {
public:
int search(vector<int>& nums, int target) {
int n = nums.size();
int low = 0 , high = n - 1; //首尾指针
int mid;
while(low <= high){
mid = (high + low) / 2;
if(nums[mid] == target){
return mid;
}
else if(nums[mid] > target){
high = mid-1;
}
else{
low = mid+1;
}
}
return -1;
}
};
27. 移除元素
经典的数组删除处理,采用双指针对数组进行遍历,遇到要删除的元素直接将其置0,移动前指针;若当前元素不需要删除,则移动后指针,将当前元素前移即可。
需要注意前指针的初始值,以及边界条件。
代码如下:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int length = nums.size(); //数组长度
int i = -1 , j = 0;
if(length == 0 || val > 50)
return length;
while(j < nums.size()){ //遍历数组
if(nums[j] == val){ //若要删除元素,则直接置零,指针后移
nums[j] = 0;
j++;
length--;
}
else{ //移动后指针,覆盖当前元素
nums[++i] = nums[j++];
}
}
return length;
}
};
总结
第一日较为基础,热热手找找写代码的感觉^^