首页 > 其他 > 详细

ARTS 计划第二周周

时间:2019-04-01 01:01:30      阅读:148      评论:0      收藏:0      [点我收藏+]

Algorithm:

15. 3Sum

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代码,确实十分的巧妙,通过排序好的一组数,设置三个指针,分别代表三个数,分别从前和从后扫描。还没有看过算法导论,感觉很像动态规划的感觉。这个代码和上次一样,出现了空集没有处理的问题。

REVIEW

Developing Your Intuition For Math
这篇文章着重的描述了对于数学学习的正确的方法——需要从数学的起源学起,这样你才能够了解这抽象的数学符号下有趣的事情和丰富的含义,以及他应该要去解决的问题。从起源也就是数学的周边来学习数学表达式的一些本质和应用,而不是单单只是一些学习的步骤。文中很形象的一个解释就是从 “cat”到“DNA”,而不是直接去了解“DNA”这样你对数学永远也不会有一个直观的认识

Tips

在最近的工作中,遇到的最大的问题就是代码量大了之后,自己对于程序代码的管理和规划问题,存在了相当大的问题。查找了一些代码规范的书籍,给自己罗列了以下几点来进行参考

对于控制流的处理

  • 先处理正逻辑,在处理负逻辑
  • 先处理简单逻辑,在处理复杂逻辑
  • 减少逻辑的嵌套(1.通过线性逻辑来处理,2.提早返回结果(错误处理))
  • 通过德摩根定理来简化逻辑

    变量删减

  • 减少冗余变量(不曾用到的,或实际可以去掉的)
  • 缩小变量作用域(只在用到的作用域附近定义变量而不全都为全局变量)
  • 将一个大类拆分成多个小类

减小函数

  • 确保函数一次只做一件事

SHARE

《数字图像处理》冈萨雷斯,通过这本书的学习,以及通过Matlab实现书中的基本章节知识,可以算基本入门了早期的图像处理的内容。

ARTS 计划第二周周

原文:https://www.cnblogs.com/bookdrip/p/10633964.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!