最大子数组和(leetcode.53)
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int pre = 0,maxAns = nums[0];
for(const auto &x:nums){
pre = max(pre+x,x);
maxAns = max(maxAns,pre);
}
return maxAns;
}
};
合并区间(leetcode.56)
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
int n = intervals.size();
vector<vector<int>> ans;
//排序 保证数组升序
//如果 a[0] < b[0],则 a 排在 b 前面。
//如果 a[0] > b[0],则 a 排在 b 后面。
//如果 a[0] == b[0],继续比较 a[1] 和 b[1]。
sort(intervals.begin(),intervals.end());
for(int i = 0; i < n; i++){
//判断是否越界 两个数组是否有重合部分
if(i < n - 1 && intervals[i][1] >= intervals[i+1][0]){
//更新原数组
//例:[1,2][2,3][5,6] => [1,2][1,3][5,6]
intervals[i+1][0] = min(intervals[i][0],intervals[i+1][0]);
intervals[i+1][1] = max(intervals[i+1][1],intervals[i][1]);
}
//如果和下一个数组没有重合部分 则推入答案数组
//注意 如果i == n - 1 代表数组末尾 一定推入答案数组
else if(i == n - 1 || intervals[i][1] < intervals[i+1][0]){
ans.push_back({intervals[i][0],intervals[i][1]});
}
}
return ans;
}
};
轮转数组(leetcode.189)
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
vector<int> newArr(n);
for(int i = 0;i < n; i++){
newArr[(i+k)%n] = nums[i];
}
nums.assign(newArr.begin(),newArr.end());
}
};