时隔4月,开始准备全职刷题。初步计划,把之前做过的题目,1-2周复习一遍,那就是有150左右了。剩下的6-8周时间,做新题,准备把那几家公司都面一遍。
从第一题开始TwoSum
public class Solution {
public int[] twoSum(int[] nums, int target) {
int[] result= new int[2];
Map<int, int> ValueToIndexMap = new HashMap<int, int>();
int len=nums.length();
for(i=0; i<len; ++i){
if(ValueToIndexMap.containsKey(target-nums[i])){
result[0]=ValueToIndexMap(target-nums[i]);
result[1]=i;
break;
}
else ValueToIndexMap.add(nums[i], i);
}
return result;
}
}
一上手写代码,逻辑是对的,语法生疏了,出错点:
1,HashMap的初始化,int是基本类,应该用class类 Integer,这个和C++不一样。
2,Map从key取value,要用get() 函数,不是能像array通过index放在[ ] 一样。要用get()
3,Map加新元素,要用put()
4,数组的长度,是一个成员变量,不是函数,因为一开始就规定好了大小。和String等一些可变容的DS里的length()不同。
5,for() loop 居然忘了int i=0... 这个要是出现在FT面试,秒挂!所以for loop这种东西的三要素一定要小心,
优点:命名得不错,就是要做到:名字即含义
修改后代码:90+%
public class Solution {
public int[] twoSum(int[] nums, int target) {
int[] result= new int[2];
HashMap<Integer, Integer> ValueToIndexMap = new HashMap();
int len=nums.length;
for(int i=0; i<len; ++i){
if(ValueToIndexMap.containsKey(target-nums[i])){
result[0]=ValueToIndexMap.get(target-nums[i]);
result[1]=i;
break;
}
else ValueToIndexMap.put(nums[i],i);
}
return result;
}
}