两数之和
代码如下(暴力方法):
public int[] twoSum(int[] nums, int target) {
int loca[]=new int [2];
int i=0;
int j=0;
int temp=0;
Map map=new HashMap();
for(i=0;i<nums.length;i++)
{
for(j=i+1;j<nums.length;j++)
{
if(nums[i]+nums[j]==target)
{
loca[0]=i;
loca[1]=j;
}
}
}
return loca;
}
使用哈希表的方法。由于对哈希表的使用不够灵活,导致浪费了很多时间,很多东西,想起来很容易,但是如何快速转换成代码还是需要下苦功夫的。
以下为代码:
class Solution {
public int[] twoSum(int[] nums, int target) {
int i=0;
int j=0;
int temp=0;
Map<Integer,Integer> map=new HashMap();
//边放边比,是一个重要思想(不容易发生错漏与重复),而且数组下标不一定做键值
for(i=0;i<nums.length;i++)
{
if(map.containsKey(target-nums[i]))
{
return new int[]{map.get(target-nums[i]),i};
}
else
{
map.put(nums[i],i);
}
}
return null;
}
}
在返回的时候构造数组可以比预先预留数组可以减少内存。以下为提交的结果。
但从评估上看,还有很大的提升空间。