1. 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n = nums.size();
for(int i = 0; i < n - 1; i ++) {
for(int j = i + 1; j < n; j ++) {
if(nums[i] + nums[j] == target) return {i, j};
}
}
return {0, 0};
}
};
49. 字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> ans;
unordered_map<string, vector<string>> groups;
for(auto x : strs) {
string s = x;
sort(s.begin(), s.end());
groups[s].emplace_back(x);
}
for(auto it = groups.begin(); it != groups.end(); it ++) {
ans.emplace_back(it->second);
}
return ans;
}
};
总结
对于STL的运用不够熟练,把问题复杂化了
128. 最长连续序列
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
sort(nums.begin(), nums.end());
set<int> c(nums.begin(), nums.end());
nums.assign(c.begin(), c.end());
int n = nums.size();
int max_l = 0;
for(int i = 0; i < n; i ++) {
while(max_l + i < n && nums[max_l + i] - nums[i] == max_l) {
max_l ++;
}
}
return max_l;
}
};
283. 移动零
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int cnt = 0;
int n = nums.size();
for(int i = 0; i < nums.size(); ){
if(!nums[i]) {
cnt ++;
// auto iter = std::remove(nums.begin(), nums.end(), 0);
auto iter = nums.erase(nums.begin() + i);
}
else {
i++;
}
}
while(cnt) {
cnt--;
nums.push_back(0);
}
return ;
}
};
11. 盛最多水的容器
class Solution {
public:
int maxArea(vector<int>& height) {
int n = height.size();
int i = 0, j = n - 1;
int max_s = 0;
while(i + 1 <= j) {
max_s = max(max_s, min(height[i], height[j]) * (j - i));
if(height[i] < height[j]) i ++;
else j --;
}
return max_s;
}
};