Skip to content

Commit ce1b21f

Browse files
committed
Add C++ solutions for leetecode 1002 and 1005.
1 parent 6aea171 commit ce1b21f

File tree

2 files changed

+121
-0
lines changed

2 files changed

+121
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include<vector>
2+
#include<algorithm>
3+
#include<iostream>
4+
#include<cstring>
5+
using namespace std;
6+
7+
class Solution {
8+
public:
9+
vector<string> commonChars(vector<string>& words) {
10+
vector<string> res;
11+
int minDict[26]; // 统计每个字母的最小count
12+
fill(minDict, minDict + 26, INT_MAX);
13+
for (int j = 0; j < words.size(); j++) // 将每一个单词进行哈希化, 然后分别算出每个字母的最小count
14+
{
15+
string curWord = words[j];
16+
vector<int> curDict(26, 0); // 26个字母
17+
for (auto& ch : curWord)
18+
curDict[ch - 'a']++;
19+
for (int i = 0; i < 26; i++)
20+
minDict[i] = min(minDict[i], curDict[i]);
21+
}
22+
for (int i = 0; i < 26; i++)
23+
{
24+
int curCount = minDict[i];
25+
if (curCount >= 1)
26+
{
27+
auto ch = i + 'a';
28+
string str;
29+
str.push_back(ch);
30+
for (int i = 0; i < curCount; i++)
31+
res.push_back(str);
32+
}
33+
}
34+
return res;
35+
}
36+
};
37+
38+
// Test
39+
int main()
40+
{
41+
Solution sol;
42+
vector<string> words = {"cool", "lock", "cook"};
43+
auto res = sol.commonChars(words);
44+
for (auto str : res)
45+
cout << str << endl;
46+
47+
return 0;
48+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#include<vector>
2+
#include<algorithm>
3+
#include<iostream>
4+
#include<numeric>
5+
using namespace std;
6+
7+
class Solution {
8+
public:
9+
int largestSumAfterKNegations(vector<int>& nums, int k) {
10+
int m = 0; // 负数的个数
11+
for (auto& num : nums)
12+
if (num < 0) m++;
13+
auto sum = accumulate(nums.begin(), nums.end(), 0);
14+
if (m == 0 && k % 2 == 0)
15+
return sum;
16+
else if (m == 0 && k % 2 == 1)
17+
{
18+
auto it = min_element(nums.begin(), nums.end());
19+
return sum - 2*(*it);
20+
}
21+
else if (m > 0 && m >= k)
22+
{
23+
sort(nums.begin(), nums.end());
24+
int sum1 = 0;
25+
for (int i = 0; i < nums.size(); i++)
26+
{
27+
if (i <= k-1) /* 题意: k >= 1, k-1不会成负数 */
28+
sum1 += -nums[i];
29+
else sum1 += nums[i];
30+
}
31+
return sum1;
32+
}
33+
else if (m > 0 && m < k)
34+
{
35+
if ((k - m) % 2 == 0)
36+
{
37+
int sum1 = 0;
38+
for (int i = 0; i < nums.size(); i++)
39+
{
40+
if (nums[i] < 0)
41+
sum1 += -nums[i];
42+
else sum1 += nums[i];
43+
}
44+
return sum1;
45+
}
46+
else {
47+
int sum1 = 0;
48+
for (int i = 0; i < nums.size(); i++)
49+
{
50+
if (nums[i] < 0)
51+
nums[i] = -nums[i];
52+
sum1 += nums[i];
53+
}
54+
sort(nums.begin(), nums.end());
55+
auto it = min_element(nums.begin(), nums.end());
56+
return sum1 - 2*(*it);
57+
}
58+
}
59+
return 0;
60+
}
61+
};
62+
63+
// Test
64+
int main()
65+
{
66+
Solution sol;
67+
vector<int> nums = {5, 6, 9, -3, 3};
68+
int k = 2;
69+
auto res = sol.largestSumAfterKNegations(nums, k);
70+
cout << res << endl;
71+
72+
return 0;
73+
}

0 commit comments

Comments
 (0)