56. Merge Intervals
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18]
,
return [1,6],[8,10],[15,18]
.
//不明白排序函数为什么要写成静态的
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
static bool cmp(Interval a, Interval b)
{
if(a.start != b.start) return a.start < b.start;
return a.end < b.end;
}
vector<Interval> merge(vector<Interval>& intervals) {
if(intervals.size() <= 1) return intervals;
sort(intervals.begin(), intervals.end(), cmp);
vector<Interval> ans;
int s, e;
s = intervals[0].start;
e = intervals[0].end;
for(int i = 1; i < intervals.size(); i++)
{
int mid = intervals[i].start;
if(s <= mid && e >= mid) e = max(intervals[i].end, e);
else
{
Interval cur = Interval(s, e);
ans.push_back(cur);
s = mid;
e = intervals[i].end;
}
}
Interval cur = Interval(s, e);
ans.push_back(cur);
return ans;
}
};
57 . Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Given intervals [1,3],[6,9]
, insert and merge [2,5]
in as [1,5],[6,9]
.
Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16]
, insert and merge [4,9]
in as [1,2],[3,10],[12,16]
.
This is because the new interval [4,9]
overlaps with [3,5],[6,7],[8,10]
.
//简单模拟下
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
int s = newInterval.start, e = newInterval.end;
vector<Interval> ans;
int i;
for(i = 0; i < intervals.size(); i++)
{
if(intervals[i].end >= s) break;
ans.push_back(intervals[i]);
}
if(i == intervals.size()) ans.push_back(newInterval);
else
{
Interval cur;
if(intervals[i].start <= s) cur.start = intervals[i].start;
else cur.start = s;
for( ; i < intervals.size(); i++)
{
if(intervals[i].end >= e) break;
}
if(i == intervals.size())
{
cur.end = e;
ans.push_back(cur);
}
else if(intervals[i].start <= e)
{
cur.end = intervals[i].end;
ans.push_back(cur);
i++;
for( ; i < intervals.size(); i++) ans.push_back(intervals[i]);
}
else
{
cur.end = e;
ans.push_back(cur);
for( ; i < intervals.size(); i++) ans.push_back(intervals[i]);
}
}
return ans;
}
};
58
.
Length of Last Word
Given a string s consists of upper/lower-case alphabets and empty space characters ' '
, return the length of last word in the string.
If the last word does not exist, return 0.
Note: A word is defined as a character sequence consists of non-space characters only.
Example:
Input: "Hello World" Output: 5
//题虽然简单,但有点坑,注意空格的位置哈
class Solution {
public:
int lengthOfLastWord(string s) {
int ans = 0, res = 0;
int len = s.length();
for(int i = 0; i < len; i++)
{
if(s[i] != ' ') res++;
else if(res) ans = res, res = 0;
}
if(res) ans = res;
return ans;
}
};
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
//同54. Spiral Matrix题 模拟下
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
if(n == 0) return {};
int res[n][n];
int l, r, ll, rr;
l = ll = 0;
r = rr = n-1;
int k = 1;
while(true)
{
for(int j = ll; j <= rr; j++) res[l][j] = k++;
if(k > n*n) break;
for(int i = l+1; i <= r; i++) res[i][rr] = k++;;
if(k > n*n) break;
for(int j = rr-1; j >= ll; j--) res[r][j] = k++;
if(k > n*n) break;
for(int i = r-1; i > l; i--) res[i][ll] = k++;
if(k > n*n) break;
l++; r--;
ll++; rr--;
}
vector<vector<int>> ans;
vector<int> cur;
for(int i = 0; i < n; i++)
{
cur.clear();
for(int j = 0; j < n; j++)
cur.push_back(res[i][j]);
ans.push_back(cur);
}
return ans;
}
};
60 . Permutation Sequence
The set [1,2,3,…,n]
contains a total of n! unique permutations.
By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):
"123"
"132"
"213"
"231"
"312"
"321"
Given n and k, return the kth permutation sequence.
Note: Given n will be between 1 and 9 inclusive.
//法1: STL
class Solution {
public:
string getPermutation(int n, int k) {
string s;
for(int i = 1; i <= n; i++) s += i+'0';
int cur = 0;
do
{
cur++;
}while(cur != k && next_permutation(s.begin(), s.end()) );
return s;
}
};
//手写的dfs, 跑的很慢,不知道人家怎么跑那么快
class Solution {
public:
string ans;
void dfs(int cur, int n, string &s, int &n_k, int &k)
{
if(cur == n)
{
n_k++;
if(n_k == k) ans = s;
return ;
}
string ss = s;
for(int i = cur; i < n; i++)
{
ss[cur] = s[i];
for(int j = cur+1; j <= i; j++) ss[j] = s[j-1];
dfs(cur+1, n, ss, n_k, k);
if(ans.length()) return ;
}
}
string getPermutation(int n, int k) {
string s;
for(int i = 1; i <= n; i++) s += i+'0';
int n_k = 0;
dfs(0, n, s, n_k, k);
return ans;
}
};