LeetCode 打卡
一、合并区间
- 题目
- 题解:
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
int n=intervals.size();
vector<vector<int>>res;
vector<int>start,end;
for(int i=0;i<n;i++){
start.emplace_back(intervals[i][0]);
end.emplace_back(intervals[i][1]);
}
sort(start.begin(),start.end());
sort(end.begin(),end.end());
for(int i =0,j=0;i<n;i++){
if(i==n-1||start[i+1]>end[i]){
res.push_back({start[j],end[i]});
j=i+1;
}
}
return res;
}
};
二、插入区间
-
题目:
-
题解:
-
方法一(合并区间方法+插入新数组):
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
if(intervals.size()==0&&newInterval.empty()) return {{}};
vector<vector<int>>res;
vector<vector<int>>copy=intervals;
copy.push_back(newInterval);
vector<int>start,end;
for(int i=0;i<copy.size();i++){
start.emplace_back(copy[i][0]);
end.emplace_back(copy[i][1]);
}
sort(start.begin(),start.end());
sort(end.begin(),end.end());
for(int i=0, j=0;i<copy.size();i++){
if(i==copy.size()-1||start[i+1]>end[i]){
res.push_back({start[j],end[i]});
j=i+1;
}
}
return res;
}
- 方法二(分左右区间):
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int>>res;
int left=newInterval[0];
int right=newInterval[1];
bool flag=false;
for(const auto&pr:intervals){
//无交集,在左侧
if(pr[0]>right){
if(!flag){
res.push_back({left,right});
flag=true;
}
res.push_back(pr);
}
else if(pr[1]<left){//无交集,在右侧
res.push_back(pr);
}
else{//有交集
left=min(left,pr[0]);
right=max(right,pr[1]);
}
}
if(!flag){
res.push_back({left,right});
}
return res;
}
};
三、最后一个单词的长度
- 题目:
- 题解:
class Solution {
public:
int lengthOfLastWord(string s) {
int n=s.size()-1;
int len=0;
for(int i=n;i>=0;i--){
if(s[i]==' '&&len!=0) break;
else if(s[i]!=' '){
len++;
}
}
return len;
}
};
四、螺旋矩阵 II
- 题目:
- 题解:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
if(n==1||n==0) return {{n}};
int left=0,right=n-1;
int top=0,bottom=n-1;
vector<vector<int>>matrix(n,vector<int>(n));
int sum=n*n;
int index=1;
while(sum>=1){
for(int i=left;i<=right&&sum>=1;i++){
matrix[top][i]=index;
index++;
sum--;
}
top++;
for(int i=top;i<=bottom&&sum>=1;i++){
matrix[i][right]=index;
index++;
sum--;
}
right--;
for(int i=right;i>=left&&sum>=1;i--){
matrix[bottom][i]=index;
index++;
sum--;
}
bottom--;
for(int i=bottom;i>=top&&sum>=1;i--){
matrix[i][left]=index;
index++;
sum--;
}
left++;
}
return matrix;
}
};