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. 通过给事情提供优先级来处理事情。

转载于:https://www.cnblogs.com/bookdrip/p/10667881.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值