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


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

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

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

    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++写代码,遇到3个问题。

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

    第2个,就是要

    #include<vector>
    #include<unordered_map>
    

    第3个,需要增加调试:

    看来要补的知识还很多。

    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倍:

    完整代码需要的,请留言,我发给您!

    为了后面更快的刷题,本来我就非常熟悉c++,但不熟悉STL,two_sum我写了7遍。

    差不多,可以做到 “快”,“bug free”了。

    为什么要写这么多遍???请参考我的另两篇博客:

    原来我也可以这么优秀(一)一个简单的极限测试

    个人领会的成功秘诀-坚持中改进

    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    Redis 实现队列优先级
    Redis 实现安全队列
    快速理解linux流编辑器sed命令
    Varnish 简介
    手机访问本地服务器
    javascript类的类比详解-大白话版
    优秀前端工程师应该掌握的内容(转自:github)
    mongodb初步使用
    Markdown 语法速查表
    pace.js和NProgress.js两个加载进度插件的一点小总结
  • 原文地址:https://www.cnblogs.com/siweihz/p/12227130.html
Copyright © 2020-2023  润新知