Given an array nums of n integers, are there elements a, b, c in nums such that a > + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
The solution set must not contain duplicate triplets.
Example:
Given array nums = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]]
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> result;
std::sort(nums.begin(), nums.end());
if (nums.size() > 2) {
if (nums[0] == 0 && nums[nums.size() - 1] == 0) {
result.push_back({ 0,0,0 });
}
else {
for (int i = 0; i < nums.size() - 2; i++)
{
int j = i + 1;
int k = nums.size() - 1;
while (k > j)
{
int sum = nums[i] + nums[j] + nums[k];
if (sum == 0)
{
vector<int> tmp;
tmp.push_back(nums[i]);
tmp.push_back(nums[j++]);
tmp.push_back(nums[k--]);
result.push_back(tmp);
}
else if (sum < 0) {
j++;
}
else if (sum > 0) {
k--;
}
}
}
}
std::sort(result.begin(), result.end());
result.erase(std::unique(result.begin(), result.end()), result.end());
}
return result;
}
};
自己一开始做的时候没有很好的把握问题的逻辑,看完一个人的java代码,确实十分的巧妙,通过排序好的一组数,设置三个指针,分别代表三个数,分别从前和从后扫描。还没有看过算法导论,感觉很像动态规划的感觉。这个代码和上次一样,出现了空集没有处理的问题。
Developing Your Intuition For Math
这篇文章着重的描述了对于数学学习的正确的方法——需要从数学的起源学起,这样你才能够了解这抽象的数学符号下有趣的事情和丰富的含义,以及他应该要去解决的问题。从起源也就是数学的周边来学习数学表达式的一些本质和应用,而不是单单只是一些学习的步骤。文中很形象的一个解释就是从 “cat”到“DNA”,而不是直接去了解“DNA”这样你对数学永远也不会有一个直观的认识
在最近的工作中,遇到的最大的问题就是代码量大了之后,自己对于程序代码的管理和规划问题,存在了相当大的问题。查找了一些代码规范的书籍,给自己罗列了以下几点来进行参考
通过德摩根定理来简化逻辑
将一个大类拆分成多个小类
《数字图像处理》冈萨雷斯,通过这本书的学习,以及通过Matlab实现书中的基本章节知识,可以算基本入门了早期的图像处理的内容。
原文:https://www.cnblogs.com/bookdrip/p/10633964.html