废话不多说,上题目
解题思路 :迭代
- 由题目得,在数组中得到两个数使得num1+num2=target给定值,那就利用数学思维,转化一下公式,变成
找到两个数使得num1=target-num2,这样子去迭代寻找 - 具体迭代过程就是:循环遍历数组中每一个值到倒数第二个为止,对每一个在去循环和它之后的每一个进行判断上述中的公式,如相等则把两个数赋值给一个长度为2的数组中,最后返回该数组。
好了,思路就到这了,上代码
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] a = new int[2];
for(int i=0;i<nums.length-1;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]==target-nums[j]){
a[0]=i;
a[1]=j;
break;
}
}
}
return a;
}
}
如果该代码看到这都看不懂,建议换行~~~~
哈哈哈哈哈,不懂就问哦~~ 博客在线陪聊~~~~~
到这发现理解比较困难,就不要看下面了,下面是进阶版
解题思路 :哈希表
- 跟上面思路一样的,先转换公式,把题目变成数组中是否有num1=target-num2
- 具体就不去用双重循环去做了,而是写一次循环数组,先对target减去每一个元素的值当成key,下标当成value存入hashmap中,然后判断该元素的值是否在该hashmap中,存在则加入到长度为2的数组中后返回。
ps:该进阶版就是用hashmap去替代掉嵌套的一层循环,大大的缩短了运行时间哦
代码如下
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] indexs = new int[2];
HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>();
for(int i = 0; i < nums.length; i++){
if(hash.containsKey(nums[i])){
indexs[0] = i;
indexs[1] = hash.get(nums[i]);
return indexs;
}
hash.put(target-nums[i],i);
}
return indexs;
}
}
啦啦啦,完成啦~~·