1.原地排序,常数空间
原地排序:用一个指针控制,第一次从左到右把0拎到前面,第二次1
因为只有两个数,所以只要两个并列的for循环就行
用一个指针控制头部的范围。
void sortColors(vector<int>& nums) {
int n=nums.size();
int ptr=0;
for(int i=0;i<n;i++){
if(nums[i]==0){
swap(nums[i],nums[ptr]);
ptr++;
}
}
for(int j=ptr;j<n;j++){
if(nums[j]==1){
swap(nums[j],nums[ptr]);
ptr++;
}
}
}
2.合并区间
想到可以置为1和0来代表是否包括在区间里了,但是实现好难,老提示我溢出了,还是看看答案吧。
二维vector我也不熟练,还把它跟python的对组搞混了
记住: merged.push_back({L, R});是给二维vec插入元素的方法
答案的方法是先放第一个区间进去,然后将剩下的与第一个比较。
intervals.begin()是二维数组第一个组的第一个数,.end()是最后一组的第一个数
.back()返回最后一个数
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if (intervals.size() == 0) {
return {};
}
sort(intervals.begin(), intervals.end());
vector<vector<int>> merged;
for (int i = 0; i < intervals.size(); ++i) {
int L = intervals[i][0], R = intervals[i][1];
if (!merged.size() || merged.back()[1] < L) {
merged.push_back({L, R});
}
else {
merged.back()[1] = max(merged.back()[1], R);
}
}
return merged;
}