406. Queue Reconstruction by Height
Suppose you have a random list of people standing in a queue. Each person is described by a pair of integers (h, k)
, where h
is the height of the person and k
is the number of people in front of this person who have a height greater than or equal to h
. Write an algorithm to reconstruct the queue.
Note:
The number of people is less than 1,100.
Example
Input: [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]] Output: [[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
C++代码
class Solution {
public:
//先根据身高排序,身高一样的,数字小的在前
//在根据第二个数字进行插入
static bool cmp (pair<int, int>& a, pair<int, int>& b) {
return a.first > b.first || (a.first == b.first && a.second < b.second);
}
vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) {
sort(people.begin(), people.end(), cmp);
int n = people.size();
vector<pair<int, int>> res;
for(int i = 0; i < n; i++) {
res.insert(res.begin() + people[i].second, people[i]);
}
return res;
}
};
392. Is Subsequence
Given a string s and a string t, check if s is subsequence of t.
You may assume that there is only lower case English letters in both s and t. t is potentially a very long (length ~= 500,000) string, and sis a short string (<=100).
A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ace"
is a subsequence of "abcde"
while "aec"
is not).
Example 1:
s = "abc"
, t = "ahbgdc"
Return true
.
Example 2:
s = "axc"
, t = "ahbgdc"
Return false
.
Follow up:
If there are lots of incoming S, say S1, S2, ... , Sk where k >= 1B, and you want to check one by one to see if T has its subsequence. In this scenario, how would you change your code?
考试的时候遇到一道类似的题,可惜卡在一个小地方没做出来,印象中做过可是没有去找材料orz,想哭。。
C++代码
class Solution {
public:
bool isSubsequence(string s, string t) {
int s_len = s.length();
int t_len = t.length();
if((s_len == 0 && t_len == 0) || (s_len == 0 && t_len != 0))
return true;
if(s_len != 0 && t_len == 0)
return false;
int i = 0, j = 0;
while(i < s_len && j < t_len){
if(s[i] == t[j]) {
i++;
j++;
}
else j++;
if(i == s_len && j <= t_len)
return true;
else if(i <= s_len && j == t_len)
return false;
}
}
};