挑战刷leetcode第一天(两数之和),你看我行吗?

98 阅读1分钟

两数之和

暴力解法,咱就不写了,算法还是要追求降低时间复杂度 hash解法 时间复杂度和空间复杂度都是O(N)

首选java,java是我从事IT行业的入门语言,所以用java语言写起来更顺手

java版本

    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map = new HashMap<>();
        int[] results = new int[2];
        for(int i=0;i<nums.length;i++){
            if(map.containsKey(target - nums[i])){
              results[0] = map.get(target-nums[i]);
              results[1] = i;
              return results;
            }else {
              map.put(nums[i],i);
            }
        }
        return results;
    }
}

次选C++,现在公司业务同时使用C++,Java ,Scala,Python作为开发语言,而且后续会往C++转,C++会成为主流开发语言,所以每次都用C++语言开发下,形成肌肉记忆

C++版本

public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;
        std::unordered_map<int,int> map;
        for( int i=0; i<nums.size(); i++ ){
            auto iter = map.find(target-nums[i]);
            if( iter!= map.end() ){
               result.push_back(iter->second);
               result.push_back(i);
               return result;
               // 此处也可以直接返回 return {iter->second,i};
            } else {
               map[nums[i]] = i;
            }
        }
       return result;
    }
};

总结

借助hash表,快速检索

打卡完成,继续坚持!!!希望友友们监督哈