两数之和
暴力解法,咱就不写了,算法还是要追求降低时间复杂度 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表,快速检索
打卡完成,继续坚持!!!希望友友们监督哈