两数之和常用算法

         1、给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

public class TwoSum {

        public static void main(String[] args) {

                int[] arr = new int[]{ 7 , 10 , 2 , 6 , 9 , 3 , 4};

                System.out.println("" + Arrays.toString(getTwoSum(arr , 13)));

        }

 

        private static int[] getTwoSum(int[] nums , int target) {
                if (nums == null) {
                    return null;
                }
                Map<Integer, Integer> map = new HashMap<Integer, Integer>();
                map.clear();
                for (int i=0;i<nums.length;i++) {
                    int comp = target - nums[i];
                    if (map.containsKey(comp)) {
                        return new int[]{map.get(comp) , i};
                    }
                    map.put(nums[i], i);
                }
                map.clear();
                map = null;
        return null;
    }

}

 

 

        2、给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的所有数组下标。

public class TwoSum {

        public static void main(String[] args) {

                int[] arr = new int[]{ 7 , 10 , 2 , 6 , 9 , 3 , 4};

                List<Integer[]> list = getAllTwoSum(arr , 12);
                for (int i=0;i<list.size();i++) {
                        System.out.println("" + Arrays.toString(list.get(i)));
                }

        }

 

    /**
     * 输出nums数组中两数之和等于target的所有下标对
     * @param nums
     * @param target
     * @return
     */
    private static List<Integer[]> getAllTwoSum(int[] nums , int target) {
                if (nums == null) {
                        return null;
                }
                List<Integer[]> list = new ArrayList<Integer[]>();
                list.clear();
                Map<Integer , Integer> map = new HashMap<Integer , Integer>();
                map.clear();
                for (int i=0;i<nums.length;i++) {
                            int temp = target - nums[i];
                           if (map.containsKey(temp)) {
                                        list.add(new Integer[]{map.get(temp) , i});
                            }
                            map.put(nums[i], i);
                }
                map.clear();
                map = null;
                return list;
        }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值