0
点赞
收藏
分享

微信扫一扫

力扣解题:两数之和

前行的跋涉者 2022-01-22 阅读 42
/*题目:给定一个整数数组nums和一个目标target,请你在该数组中找出合为目标值的那两个整数,并返回他们的下标
 nums[]={2,7,11,15};
 target=9;
*/
public class two_sum {
//解法1、暴力枚举
    public int[] twoSum(int[] nums,int target) throws IllegalAccessException {
        int len=nums.length;

        for (int i = 0; i <len-1 ; i++) {//因为第一层循环符合条件的下标不可能是最后一个,所以len-1
            for (int j = i+1; j <len ; j++) {
                if(nums[i]+nums[j]==target){
                    return new int[]{i,j};
                }
            }
        }
        throw new IllegalAccessException("no find");
    }
}

//测试类

public class shixian_1 {
    public static void main(String[] args) throws IllegalAccessException {
        int[] nums={2,7,11,15};
        int target=9;
        int[] ints= new two_sum().twoSum(nums, target);

        for (int i = 0; i <ints.length ; i++) {
            System.out.println(ints[i]);
        }
    }
}
//解法2、哈希表记录
public class two_sum_2 {
    public int[] two(int[] nums,int target){
        int len=nums.length;
        Map<Integer,Integer> hashMap=new HashMap<>(len-1);//设定哈希表长度
        hashMap.put(nums[0],0);//第一个元素肯定不是两个目标元素的最后一个,放入哈希表
        for (int i = 1; i <len ; i++) {
            int a=target-nums[i];
            if (hashMap.containsKey(a)){
                return new int[]{i,hashMap.get(a)};
            }
            hashMap.put(nums[i],i);//将不满足条件的元素及下标放入哈希表
        }
        throw new IllegalArgumentException("no find");

    }
}
public class shixian_1 {
    public static void main(String[] args) throws IllegalAccessException {
        int[] nums={2,7,11,15};
        int target=9;
        int[] ints= new two_sum().twoSum(nums, target);

        for (int i = 0; i <ints.length ; i++) {
            System.out.println(ints[i]);
        }
    }
}
public class two_sum {
//解法1、暴力枚举
    public int[] twoSum(int[] nums,int target) throws IllegalAccessException {
        int len=nums.length;

        for (int i = 0; i <len-1 ; i++) {//因为第一层循环符合条件的下标不可能是最后一个,所以len-1
            for (int j = i+1; j <len ; j++) {
                if(nums[i]+nums[j]==target){
                    return new int[]{i,j};
                }
            }
        }
        throw new IllegalAccessException("no find");
    }
}
//解法2、哈希表记录
public class two_sum_2 {
    public int[] two(int[] nums,int target){
        int len=nums.length;
        Map<Integer,Integer> hashMap=new HashMap<>(len-1);//设定哈希表长度
        hashMap.put(nums[0],0);//第一个元素肯定不是两个目标元素的最后一个,放入哈希表
        for (int i = 1; i <len ; i++) {
            int a=target-nums[i];
            if (hashMap.containsKey(a)){
                return new int[]{i,hashMap.get(a)};
            }
            hashMap.put(nums[i],i);//将不满足条件的元素及下标放入哈希表
        }
        throw new IllegalArgumentException("no find");

    }
}

题目链接:力扣

举报

相关推荐

力扣—两数之和

力扣 两数之和Java

力扣C++ 两数之和

力扣算法训练_两数之和

0 条评论