zoukankan      html  css  js  c++  java
  • ARTS 计划第二周周

    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实现书中的基本章节知识,可以算基本入门了早期的图像处理的内容。

  • 相关阅读:
    2007417 13:01:00 运行时数据结构
    2008515 1:38:00 为受灾的人们祈福,祭那些在地震中离开的人
    200732 19:00:00 一段设置8253芯片的程序
    从实模式到保护模式
    200739 18:01:00 linux界的元老
    2007311 19:11:00 cpu执行第一条指令时情形
    20061127 19:54:00 在你心中有这样的一个人吗? (转)
    linux0.11内存管理——try_to_share()
    2007413 20:46:00 linux0.11之copy_page_tables()函数见解
    POJ1258AgriNet
  • 原文地址:https://www.cnblogs.com/bookdrip/p/10633964.html
Copyright © 2011-2022 走看看