码迷,mamicode.com
首页 > 其他好文 > 详细

从心出发-刷leetcode写给5年后的自己

时间:2020-01-22 16:45:51      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:number   ++   版本   free   数据结构   还需   能力   case   mapping   

而立之年终未立,不惑而年犹存惑!这或许就是所谓的中年危机吧!

自认为是一个“勤奋”的人,又“未有寸功”,天天碌碌,不知何为。

“常立志”而未达,以至于“泯然众人矣”。

2020年起的五年,专注于2-3个点,深度耕耘,希望能有一点点小“成就”。

1. 提升个人能力

  • 坚持输入

    简而言之,就是不断学习。

    读书: 每读一本书就写读书心得。

    提升技术能力:提升java开发能力,精进C++能力。

  • 思考

    行动上的勤快人,不做思想的懒汉;

    用思维导图进行总结

  • 输出

    坚持技术博客,2020年度至少写100篇;

2. 用3个月的时间刷leetcode

刷leetcode,做到手写代码bug free。通过刷题,提升个人“数据结构”、“算法”等能力。

闲话少叙,直奔主题,从leetcode的top-100-liked-questions开始。

3. two sum

第一个题目是two sum,看到题目,难度是easy,但我懵了。

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

好在题目右边,有一个框,选择java的时候,会出现:

技术图片

如果说用java写,我觉得还是写的出来的。

毕竟一直在用,而且对于里面的集合相关类都非常熟悉。

但C++,我确实倍感吃力,主要是STL很少用,上来给了vector,我就已经无力了:

技术图片

我在dev-c++写代码,遇到2个问题。

第一个是环境,需要配置-std=c++11,见下图:

技术图片

第二个,就是要 #include<vector>。

看来要补的知识还很多。

4.疑问

在此,我有一个疑问,代码提交上去后,他们怎么测试?

是不是有test case:生成Solution对象,调用twoSum(),验证结果?

还需要学习啊!

5.总结

写了2个版本,第一个版本:

public:
vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> res;
        for(int i=0; i< nums.size(); i++){
            for(int j=i+1; j< nums.size(); j++){
                if(nums[i] + nums[j] == target){
                    res.push_back(i);
                    res.push_back(j);
                    break;
                }
            }
        }
        return res;
    }
};

第二个版本,网上找的:

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
    unordered_map<int,int> mapping;
    vector<int> result;
    
    for(int i=0;i<nums.size();i++){
        mapping[nums[i]] = i;
    }
    
    for(int i=0; i< nums.size(); i++){
        const int gap = target - nums[i];
        
        if(mapping.find(gap) != mapping.end() && mapping[gap]>i){
            result.push_back(i);
            result.push_back(mapping[gap]);
            break;
        }
    }
    return result;
    }
};

上述代码,是需要提交的,如果在本地的dev-c++中,则需要增加main函数:

int main(){
    Solution s;
    vector<int> v = {2,7,11,15};
    vector<int> v2 = s.twoSum(v,9);
    for(vector<int>::iterator iter=v2.begin();iter!=v2.end();++iter)
        cout<<*iter<<" ";
    return 0;
} 

内存差不多,但速度提升10倍:

技术图片

从心出发-刷leetcode写给5年后的自己

标签:number   ++   版本   free   数据结构   还需   能力   case   mapping   

原文地址:https://www.cnblogs.com/siweihz/p/12227130.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!