Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /