赞
踩
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
关于算法题,第一就是用暴力算法,当熟悉一下题目。
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int i = 0;i < nums.length;i++) {
for(int j = i + 1;j < nums.length;j++) {
if(nums[i] + nums[j] == target) {
return new int[]{i,j};
}
}
}
return null;
}
}
Hash算法,用空间换取时间
import java.util.HashMap; import java.util.Map; class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer,Integer> keys = new HashMap<Integer,Integer>(); for(int i = 0;i < nums.length;i++) { int targetKey = target - nums[i]; if(keys.containsKey(targetKey)) { return new int[]{keys.get(targetKey),i}; } if(!keys.containsKey(nums[i])) { keys.put(nums[i],i); } } return null; } }
数组算法,用空间换取时间
缺陷:占用恐怖空间,只能是研究,实践中不推荐。
import java.util.HashMap; import java.util.Map; class Solution { public int[] twoSum(int[] nums, int target) { int volume = 2 << 8; int[] targetNums = new int[volume]; int bitNum = volume - 1; for(int i = 0;i < nums.length;i++) { int c = (target-nums[i]) & bitNum; if(targetNums[c] != 0) { return new int[]{targetNums[c] - 1,i}; } else { targetNums[nums[i] & bitNum] = i + 1; } } return null; } }
import java.util.HashMap; import java.util.Map; class Solution { public int[] twoSum(int[] nums, int target) { int[] newNums = new int[nums.length]; newNums = Arrays.copyOf(nums,nums.length); Arrays.sort(nums); Integer match1 = null; Integer match2 = null; for(int i = 0,j = nums.length -1;i < j;) { int currentNum = nums[i] + nums[j]; if(currentNum == target) { match1 = nums[i]; match2 = nums[j]; break; } else if(currentNum > target) { j--; } else { i++; } } if(match1 == null) { return null; } else { Integer first = null; Integer second = null; for(int i = 0;i < newNums.length;i++) { if(first == null && match1 == newNums[i]) { if(second != null) { return new int[]{i,second}; } first = i; } else if(match2 == newNums[i]) { if(first != null) { return new int[]{first,i}; } second = i; } } return null; } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。