数组理论基础
文章链接:代码随想录
数组是存放在连续内存空间上的相同类型数据的集合。
- 数组下标都是从0开始的
- 数组内存空间的地址是连续的
LeetCode704 二分查找
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文章讲解:代码随想录
视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili
状态:✅
备注:注意到nums.size() - 1可以获取数组的长度
我的答案
class Solution {
public:
int search(vector<int>& nums, int target) {
int low = 0,high = 0;
high = nums.size() - 1;
while(low<=high){
int mid = (low + high)/2;
if(nums[mid]==target){
return mid;
}
if(nums[mid]>target){
high = mid - 1;
}
if(nums[mid]<target){
low = mid + 1;
}
}
return -1;
}
};
LeetCode27 移除元素
状态:修改了几下,最终自己做出来了✅
备注:
- 应该新定义一个变量size来记录nums.size()
- 考虑第一和最后元素都为val的情况
我的答案
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int flag = 0,i = 0;
int size = nums.size();
while(i<nums.size()){
nums[i-flag] = nums[i];
if(nums[i]==val){
size = size - 1;
flag++;
}
i++;
}
return size;
}
};
思路:进行一次for循环,将每个元素nums[i]移动i-flag个位置
优质答案(双指针法)
// 时间复杂度:O(n)
// 空间复杂度:O(1)
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slowIndex = 0;
for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {
if (val != nums[fastIndex]) {
nums[slowIndex++] = nums[fastIndex];
}
}
return slowIndex;
}
};