Skip to content

Commit 60090e4

Browse files
committed
添加496, 498, 503等题
1 parent 7f4686c commit 60090e4

File tree

24 files changed

+735
-14
lines changed

24 files changed

+735
-14
lines changed

Algorithms/300.Longest-Increasing-Subsequence/solution.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ class Solution {
1515
}
1616
return maxlen;
1717
}
18-
};
18+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public:
3+
vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) {
4+
map<int, int> max;
5+
for(int i=0;i<nums.size();i++){
6+
for(int j=i+1;j<nums.size();j++){
7+
if(nums[j] > nums[i]){
8+
max[nums[i]] = nums[j];
9+
break;
10+
}
11+
}
12+
}
13+
14+
vector<int> result(findNums.size(),0);
15+
for(int i=0;i<findNums.size();i++){
16+
if(max.find(findNums[i]) == max.end()){
17+
result[i] = -1;
18+
}else
19+
result[i] = max[findNums[i]];
20+
}
21+
return result;
22+
}
23+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution {
2+
public:
3+
vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
4+
int row = matrix.size();
5+
int col = row>0?matrix[0].size():0;
6+
vector<int> result(row*col,0);
7+
int cur = 0;
8+
bool right = false;
9+
int i,j,minn,start;
10+
for(int sum = 0;sum<row + col - 1;sum++){
11+
if(right){
12+
minn = min(row,sum+1);
13+
start = max(sum-col+1,0);
14+
for(i=start;i<minn;i++){
15+
result[cur] = matrix[i][sum-i];
16+
cur++;
17+
}
18+
}else{
19+
minn = min(col,sum+1);
20+
start = max(sum-row+1,0);
21+
for(j=start;j<minn;j++){
22+
result[cur] = matrix[sum-j][j];
23+
cur++;
24+
}
25+
}
26+
right = !right;
27+
}
28+
return result;
29+
}
30+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public:
3+
vector<int> nextGreaterElements(vector<int>& nums) {
4+
vector<int> max;
5+
for(int i=0;i<nums.size();i++){
6+
int find = false;
7+
for(int j=(i+1)%nums.size();j!=i;j=(j+1)%nums.size()){
8+
if(nums[j] > nums[i]){
9+
max.push_back(nums[j]);
10+
find = true;
11+
break;
12+
}
13+
}
14+
if(!find)
15+
max.push_back( -1);
16+
}
17+
return max;
18+
}
19+
};
+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
bool cmp(pair<int,int> i, pair<int,int> j){
2+
return j.first < i.first;
3+
}
4+
5+
class Solution {
6+
public:
7+
vector<string> findRelativeRanks(vector<int>& nums) {
8+
vector<pair<int, int> > mapp;
9+
for(int i=0;i<nums.size();i++){
10+
mapp.push_back(pair<int,int>(nums[i],i));
11+
}
12+
sort(mapp.begin(), mapp.end(), cmp);
13+
14+
vector<string> str(nums.size());
15+
for(int i=0;i<mapp.size();i++){
16+
str[mapp[i].second] = to_string(i + 1);
17+
}
18+
if(mapp.size() > 0)
19+
str[mapp[0].second] = "Gold Medal";
20+
if(mapp.size() > 1)
21+
str[mapp[1].second] = "Silver Medal";
22+
if(mapp.size() > 2)
23+
str[mapp[2].second] = "Bronze Medal";
24+
return str;
25+
}
26+
};

Algorithms/674.Longest-Continuous-Increasing-Subsequence/solution.cpp

+14-12
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,21 @@ class Solution {
55
return 0;
66

77
int max = 1;
8-
int temp = 1;
9-
int last = nums[0];
10-
for(int i=1;i<nums.size();i++){
11-
if(nums[i] > last){
12-
temp += 1;
13-
if(temp > max)
14-
max = temp;
15-
}
16-
else{
17-
temp = 1;
8+
9+
for(int i=0;i<nums.size();i++){
10+
// cout << "i=" << i << ':' << endl;
11+
int temp = 1;
12+
for(int j=i;j+1<nums.size();j++){
13+
// cout << " j=" << j << ':' << nums[j] << "," << nums[j+1] << endl;
14+
if(nums[j+1] > nums[j])
15+
temp += 1;
16+
else
17+
break;
1818
}
19-
last = nums[i];
19+
if(temp > max)
20+
max = temp;
2021
}
2122
return max;
2223
}
23-
};
24+
};
25+

Algorithms/680.Valid-Palindrome-II/solution.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@ class Solution {
3434
}
3535
return result;
3636
}
37-
};
37+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public:
3+
int countPrimeSetBits(int L, int R) {
4+
int arr[11] = {2,3,5,7,11,13,17,19,23,29,31};
5+
set<int> primeSet(arr,arr+11);
6+
int prime = 0;
7+
for(int i=L;i<=R;i++){
8+
int temp=0;
9+
int num = i;
10+
while(num>0){
11+
if(num & 1)
12+
temp += 1;
13+
num = num >> 1;
14+
}
15+
if(primeSet.find(temp) != primeSet.end())
16+
prime += 1;
17+
}
18+
return prime;
19+
}
20+
};
+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
class Solution {
2+
public:
3+
string toGoatLatin(string S) {
4+
string result;
5+
int i = 0;
6+
int count = 0;
7+
bool vowel = false;
8+
string word;
9+
while(i<S.size()){
10+
if(S[i]==' '){
11+
i++;
12+
continue;
13+
}else if(S[i]=='a'||S[i]=='A'||S[i]=='e'||S[i]=='E'||S[i]=='i'
14+
||S[i]=='I'||S[i]=='o'||S[i]=='O'||S[i]=='u'||S[i]=='U'){
15+
int j=0;
16+
for(;i+j<S.size();j++)
17+
if(S[i+j] == ' ')
18+
break;
19+
word = S.substr(i, j);
20+
result.append(word);
21+
result.append("ma");
22+
result.append(count+1, 'a');
23+
result.append(1, ' ');
24+
count += 1;
25+
i += j;
26+
}else{
27+
int j=0;
28+
for(;i+j<S.size();j++)
29+
if(S[i+j] == ' ')
30+
break;
31+
word = S.substr(i+1, j-1);
32+
result.append(word);
33+
result.append(1,S[i]);
34+
result.append("ma");
35+
result.append(count+1, 'a');
36+
result.append(1, ' ');
37+
count += 1;
38+
i += j;
39+
}
40+
}
41+
return result.substr(0,result.size()-1);
42+
}
43+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public:
3+
int numFriendRequests(vector<int>& ages) {
4+
sort(ages.begin(),ages.end());
5+
int count = 0;
6+
int edge;
7+
for(int i=0;i<ages.size();i++){
8+
int j;
9+
edge = ages[i] * 0.5 + 7;
10+
for(j=i-1;j>=0;j--)
11+
if(ages[j] > edge)
12+
count ++;
13+
else
14+
break;
15+
16+
for(j=i+1;j<ages.size();j++)
17+
if(ages[j] == ages[i] && ages[j] > edge)
18+
count ++;
19+
else
20+
break;
21+
}
22+
23+
return count;
24+
}
25+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
bool cmp(pair<int,int> i, pair<int,int> j){
2+
return i.first < j.first;
3+
}
4+
5+
class Solution {
6+
public:
7+
int maxProfitAssignment(vector<int>& difficulty, vector<int>& profit, vector<int>& worker) {
8+
vector<pair<int,int> > prolist(difficulty.size());
9+
for(int i=0;i<difficulty.size();i++){
10+
prolist[i].first = difficulty[i];
11+
prolist[i].second = profit[i];
12+
}
13+
14+
sort(prolist.begin(),prolist.end(),cmp);
15+
16+
// vector<int> pro(profit.size());
17+
int maxpro = 0;
18+
for(int i=0;i<profit.size();i++){
19+
maxpro = max(maxpro,prolist[i].second);
20+
prolist[i].second = maxpro;
21+
}
22+
int result = 0;
23+
int temppro = 0;
24+
for(int i=0;i<worker.size();i++){
25+
temppro = 0;
26+
for(int j=0;j<difficulty.size();j++){
27+
if(worker[i] >= prolist[j].first)
28+
temppro = prolist[j].second;
29+
else
30+
break;
31+
}
32+
result += temppro;
33+
}
34+
return result;
35+
}
36+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
TreeNode *nt;
13+
TreeNode *cur;
14+
TreeNode* increasingBST(TreeNode* root) {
15+
nt = new TreeNode(0);
16+
cur = nt;
17+
midOrder(root);
18+
return nt->right;
19+
}
20+
21+
int midOrder(TreeNode* node){
22+
if(node == NULL)
23+
return 0;
24+
midOrder(node->left);
25+
cur->right = new TreeNode(node->val);
26+
cur = cur->right;
27+
midOrder(node->right);
28+
return 0;
29+
}
30+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution {
2+
public:
3+
bool isLongPressedName(string name, string typed) {
4+
vector<pair<char, int> > na, ty;
5+
char last='0';
6+
for(int i=0;i<name.size();i++){
7+
if(name[i] == last)
8+
na[na.size()-1].second += 1;
9+
else
10+
na.push_back(pair<char, int>(name[i], 1));
11+
last = name[i];
12+
}
13+
14+
last='0';
15+
for(int i=0;i<typed.size();i++){
16+
if(typed[i] == last)
17+
ty[ty.size()-1].second += 1;
18+
else
19+
ty.push_back(pair<char, int>(typed[i], 1));
20+
last = typed[i];
21+
}
22+
23+
if(na.size() != ty.size())
24+
return false;
25+
for(int i=0;i<na.size();i++){
26+
if( (na[i].first != ty[i].first) || (na[i].second > ty[i].second))
27+
return false;
28+
}
29+
return true;
30+
}
31+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class Solution {
2+
public:
3+
int minFlipsMonoIncr(string S) {
4+
vector<pair<int, int> > group;
5+
int t;
6+
int last = S[0]=='1'?1:0;
7+
group.push_back(pair<int,int>(last, 1));
8+
for(int i=1;i<S.size();i++){
9+
t = S[i]=='1'?1:0;
10+
if(t == last)
11+
group[group.size()-1].second += 1;
12+
else
13+
group.push_back(pair<int,int>(t, 1));
14+
last = t;
15+
}
16+
17+
18+
vector<int> leftOne(group.size(),0), rightZero(group.size(),0);
19+
20+
for(int i=1;i<group.size();i++){
21+
leftOne[i] = group[i-1].first==1?group[i-1].second:0;
22+
leftOne[i] += leftOne[i-1];
23+
}
24+
for(int i=group.size()-2;i>=0;i--){
25+
rightZero[i] = group[i+1].first==0?group[i+1].second:0;
26+
rightZero[i] += rightZero[i+1];
27+
}
28+
29+
30+
int min = S.size();
31+
for(int i=0;i<group.size();i++)
32+
if(leftOne[i] + rightZero[i] < min)
33+
min = leftOne[i] + rightZero[i];
34+
35+
return min;
36+
}
37+
};

0 commit comments

Comments
 (0)