题解 | #两数之和#

两数之和

http://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f

遍历数组,用与目标值的差来寻找是否存在数组中

思路

  1. 首先声明一个ArrayList,将原数组的数值都存放在该list中,后面可以利用list.indexOf(a)找到元素a第一次出现的索引

  2. 遍历数组,获取与目标值target的差值,然后去ArrayList中查找该差值第一次出现的索引

  3. 注意:因为ArrayList与原数组一样,所以对于[3, 2, 4] 6这种例子,遍历第一个元素时,差值也为3,此时通过indexOf()得到的索引与遍历数组的i是相同的,所以我们需要额外判断一下i != indexOf(),这样才能找到不同位置的元素

    import java.util.*;
    public class Solution {
     /**
      * 
      * @param numbers int整型一维数组 
      * @param target int整型 
      * @return int整型一维数组
      */
     public int[] twoSum (int[] numbers, int target) {
         // write code here
         // 使用一个ArrayList来存储原数组
         // 遍历原数组,获取到当前遍历到的数值
         // 用target与当前数值的差去判断是否存在原数组中
         // 此时就可以通过ArrayList的indexOf()来获取另一个数值的索引(即差的索引)
         int index2 = -1;
         int index1 = -1;
         int[] res = new int[2];
         int cur = -1;
         ArrayList<Integer> a = new ArrayList<>();
         for (int i = 0; i < numbers.length; i++) {
             a.add(numbers[i]);
         }
    
         for (index1 = 0; index1 < numbers.length; index1++) {
             cur = target - numbers[index1];
             if (a.indexOf(cur) != -1) {
                 // 注意:因为indexOf()只能返回元素第一次出现的索引,所以遇到例如[0, 1, 2, 0] target=0的情况
                 // 那么通过indexOf得到的索引也是0,所以这里就需要额外加一个判断条件index1 != indexOf(cur)
                 if (index1 != a.indexOf(cur)) {
                     index2 = a.indexOf(cur);
                     break;
                 }
             }
         }
         // 那对于该例子最终得到的结果是index1=3, index2 = 0,所以这里就额外加个判断吧!看谁大就放在数组后面
         if (index1 < index2) {
             res[0] = index1 + 1;
             res[1] = index2 + 1;
         }else {
             res[0] = index2 + 1;
             res[1]= index1 + 1;
         }
         return res;
     }
    }
全部评论

相关推荐

cuicuicuicuicui:佬是是硕还是本啊
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
09-27 21:08
点赞 评论 收藏
分享
最讨厌装boyi的二🔥:服从性测试😉
点赞 评论 收藏
分享
头像
09-25 12:29
四川大学 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务