從心出發-刷leetcode寫給5年後的本身

而立之年終未立,不惑而年猶存惑!這或許就是所謂的中年危機吧!html

自認爲是一個「勤奮」的人,又「未有寸功」,每天碌碌,不知何爲。java

「常立志」而未達,以致於「泯然衆人矣」。c++

2020年起的五年,專一於2-3個點,但願能有一點點小「成就」。算法

1. 提高我的能力

  • 堅持輸入數據結構

    簡而言之,就是不斷學習。app

    讀書: 每讀一本書就寫讀書心得。函數

    提高技術能力:提高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」了。

爲何要寫這麼多遍???請參考個人另兩篇博客:

原來我也能夠這麼優秀(一)一個簡單的極限測試

我的領會的成功祕訣-堅持中改進

相關文章
相關標籤/搜索