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

    Algorithm:

    3Sum Closest

    Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

    Example:

    Given array nums = [-1, 2, 1, -4], and target = 1.

    The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

    Solution

    class Solution {
    public:
    	int threeSumClosest(vector<int>& nums, int target) {
    		std::sort(nums.begin(), nums.end());
    		int sum = nums[nums.size() - 1] + nums[nums.size() - 2] + nums[nums.size() - 3];
    		int adistance = abs(nums[nums.size() - 1] + nums[nums.size() - 2] + nums[nums.size() - 3]-target);
    		int i = 0;
    		if (nums.size() > 2) {
    			for (i = 0; i < nums.size() - 2; i++)
    			{
    				int j = i + 1;
    				int k = nums.size() - 1;
    
    				while (k > j) {
    					int tmp = nums[i] + nums[j] + nums[k];
    					int compare = tmp - target;
    					if (abs(compare) < adistance)
                        {sum = tmp;
    						adistance = abs(compare);
                        }
    					if (compare < 0)
    					{
    						j++;
    					}
    					else if (compare > 0)
    					{
    						k--;
    					}
    					else if(compare==0)
    					{
    						sum = tmp;
    						return sum;
    					}
    				}
    			}
    		}
    		return sum;
    	}
    };
    

    和上一题的基本算法相似,不同在于需要判断三个数的和是否与目标值最接近,如果较小就更新结果。

    Letter Combinations of a Phone Number

    Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent.

    A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.

    Example:

    Input: "23"
    Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

    Solution

    class Solution {
    public:
    	string NumChar[8];
    	vector<string> result;
    	void initial() {
    		NumChar[0] = "abc";
    		NumChar[1] = "def";
    		NumChar[2] = "ghi";
    		NumChar[3] = "jkl";
    		NumChar[4] = "mno";
    		NumChar[5] = "pqrs";
    		NumChar[6] = "tuv";
    		NumChar[7] = "wxyz";
    	}
    	void GetNumber(vector<string> &result, string answer, int remainsize, string digits)
    	{
    		if (remainsize == 0)
    		{
    			result.push_back(answer);
    		}
    		else if (remainsize > 0)
    		{
    			int num = digits.size() - remainsize;
    			int index = NumChar[digits[num]-'2'].size();
    			for (int i = 0; i < index; i++)
    			{
    				int remainsizecopy = remainsize;
    				string answer_copy = answer;
    				answer_copy += NumChar[digits[num]-'2'][i];
    				remainsizecopy--;
    				GetNumber(result, answer_copy, remainsizecopy, digits);
    			}
    		}
    	}
    	vector<string> letterCombinations(string digits) {
    		initial();
            if(digits==""){
                return result;
            }
    		string answer;
    		GetNumber(result, answer, digits.size(), digits);
    		return result;
    	}
    };
    

    使用递归的算法:

    1. 将整个事情分为两部,第一部分为当前的按钮需要选区的值,第二部分为剩余的部分。
    2. 在剩余的部分继续使用步骤一,直至到最后一个。

    REVIEW

    Unix环境高级编程
    1.open read write lseek pthread_t fork 这些函数的学习。
    2.尝试写出多线程的冲突问题,没有找到,后来发现可能是虚拟机的单核,导致多线程没有出现冲突的情况

    TIPS

    一直迷茫在工作和学习的问题上,没有好好工作。没有什么可以记录的。

    SHARE

    [10 proven, most effective ways to use a to-do list]
    (https://www.bountytasker.com/10-proven-most-effective-ways-to-use-a-to-do-list/)
    高效的时间规划对我的启发。

    1. 通过尽可能的完成计划来作为一天的结束,这样第二天你就不会制定不合乎实际的计划了。
    2. 只需罗列5条重要的事情,过多的条目会让你不知道事情的重要性
    3. 给每个事情安排提供 一个时间段,可以提高实现事情的可能
    4. 通过给事情提供优先级来处理事情。
  • 相关阅读:
    设计模式之适配器模式(Adapter)
    数组中的趣味题(二)
    VSTS 2008 自定义签入代码审查策略
    自定义 Vista 系统下程序运行级别
    全国省份,城市,地区全数据(SQL版与XML版)包括各城市邮编
    LINQ 从数据库读数据生成 XML
    IE 8 Beta 2 初体验 隐藏了的"IE7模式"
    利用宏帮助快速录入代码
    你现在的生活是你n年前决定的
    控制参数个数的几种方式
  • 原文地址:https://www.cnblogs.com/bookdrip/p/10667881.html
Copyright © 2011-2022 走看看