278.第一个错误的版本
题目链接
// Forward declaration of isBadVersion API.
bool isBadVersion(int version);
class Solution {
public:
typedef long long LL;
int firstBadVersion(int n) {
LL l = 1, r = n, m;
while(l<r){
m = (l + r)>>1;
if(isBadVersion(m))r = m;
else l = m + 1;
}
return r;
}
};
283.移动零
题目链接
class Solution {
public:
void moveZeroes(vector<int>& nums) {
ios::sync_with_stdio(0);cin.tie(0);
int siz = nums.size(), st = -1, ed = 0;
while(++st<siz)if(nums[st])swap(nums[st],nums[ed++]);
}
};

本文介绍了两种高效的算法技巧:二分查找和双指针。二分查找用于在有序数组中查找特定元素的第一个错误版本,通过不断缩小搜索范围,实现O(log n)的时间复杂度。双指针技巧则应用于移动零的问题,通过快慢两个指针,将非零元素前移,同时保持数组的相对顺序,实现原地修改数组的目标。
1267

被折叠的 条评论
为什么被折叠?



