给一个int数组,给一个目标值,让你给出数组里的两个数的下标,which和是目标值
C++:目测他们内置的g++编译器不支持STL的hashMap,用了本地能编译过,交上去就是CE,然后暴力一发过了,第二层for里的j都没从i+1开始都可以过。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int>output;
int cnt=nums.size();
for(int i=0;i<cnt;i++){
for(int j=0;j<cnt;j++){
if(j==i)continue;
if(nums[i]+nums[j]==target){
output.push_back(i);
output.push_back(j);
return output;
}
}
}
}
};
java:用HashMap做,这里HashMap要注意一下
java HashMap 里面要用引用类型,不能用原始类型不然会Dimensions expected
原始类型 封装类
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
HashMap<Integer,Integer> myMap=new HashMap<Integer,Integer>();
用put存,get取,这里我暴力了一发也过了。。。
public class Solution {
public int[] twoSum(int[] nums, int target) {
int ans[]=new int[2];
int cnt=nums.length;
//Map mymap = new HashMap ();
//HashMap<String,String> aaa = new HashMap<String,String>();
HashMap<Integer,Integer> myMap=new HashMap<Integer,Integer>();
for(int i=0;i<cnt;i++){
if(myMap.get(nums[i])!=null){
if(nums[i]*2==target){
ans[0]=myMap.get(nums[i]);
ans[1]=i;
return ans;
}
}
else{
if(myMap.get(target-nums[i])!=null){
ans[0]=myMap.get(target-nums[i]);
ans[1]=i;
return ans;
}
else myMap.put(nums[i], i);
}
}
return ans;
}
}
Python:Python的字典,就默认是hashMap,C++和java的Map都是红黑树,这里用{}就行了。我发现Python暴力过不了这个题,很醉。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
ans=[]
hashmap={}
cnt=len(nums)
for i in range(cnt):
if hashmap.get(nums[i])!=None:
if nums[i]*2==target:
ans.append(hashmap[nums[i]])
ans.append(i)
return ans
elif hashmap.get(target-nums[i])!=None:
ans.append(hashmap[target-nums[i]])
ans.append(i)
return ans
else:
hashmap[nums[i]]=i;