数组基础
1 数组是存放在连续内存空间上的相同类型数据的集合
注意:
1 数组下标从0开始
2 数据内存地址空间是连续的 (二维也一样)
数组的元素不能删只能覆盖
二分查找:
前提:
1元素可以重复 但结果不唯一 要去看要哪一边
2数组升序或降序
class Solution {
public:
int search(vector<int>& nums, int target) {
int left =0,right=nums.size()-1,mid;
while(left<=right){
mid=(left+right)/2;
if(nums[mid]==target){
return mid;
}
else if(target>nums[mid]){
left=mid+1;
}
else{
right=mid-1;
}
}
return -1;
}
};
非常简单的小题 之前做过 一遍过。
移除指针:
注意1
函数类型是int 所以不能return false, 应该return 0
2 fast 要小于nums.size() 而不是小于等于 因为数组编号是从0开始的
还是没有搞清楚双指针的概念 应该是fast移动而slow先不动 而不是fast移动而slow不动 思维问题 没有想到位。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow=0,n=0,fast=0;
for(;fast<nums.size();fast++){
if(nums[fast]!=val){
nums[slow]=nums[fast];
slow++;
}
}
return slow;
}
};
感觉很神奇 就是这个双指针的办法 非常的巧妙 就是用本数组当作新的数组 而不是我一开始想的先验证slow是不是要删除的 如果slow要删除就再去用fast指针去判断 看看fast要不要删除 ,然后最后再赋值 这样代码很复杂 因为我没有理解到位fast指针和slow指针的作用 用了slow指针当作fast指针 导致代码臃肿