给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
翻译了一下英文的
简单的思路就是遍历两遍数组,找到两个值相加, 很明显,这是n2的复杂度
另外一个简单的思路就是用空间换时间,由于告诉你不会重复, 不用set用hashmap就好了
key为值,value为下标。时间复杂度O(N)。
public static int[] twonumadd(int[] nums, int targetnum) {
int[] label = new int[2];
HashMap<Integer, Integer> hashMap = new HashMap<>();
for(int i=0;i<nums.length;i++) {
hashMap.put(nums[i], i);
}
for(int i=0;i<nums.length;i++) {
if(hashMap.containsKey(targetnum-nums[i])&&hashMap.get(targetnum-nums[i])!=i) {
label[0] = i;
label[1] = hashMap.get(target-nums[i]);
break;
}
}
return label;
}
网友评论