欢迎访问宙启技术站
智能推送

Java函数实现求两数之和的算法

发布时间:2023-07-26 10:33:59

求两数之和算法的思路可以有很多种,以下是几种不同的实现方式。

方法一:暴力法

最简单直观的方式就是使用两个嵌套循环,依次遍历数组中的每一个元素,判断是否存在两个数的和等于目标值。时间复杂度为O(n^2)。

public int[] twoSum(int[] nums, int target) {
    for (int i = 0; i < nums.length - 1; i++) {
        for (int j = i + 1; j < nums.length; j++) {
            if (nums[i] + nums[j] == target) {
                return new int[]{i, j};
            }
        }
    }
    // 如果不存在符合条件的结果,则返回一个空数组
    return new int[0];
}

方法二:哈希表

使用哈希表可以减少查找的时间复杂度,将数组中的元素与其下标存储在哈希表中,然后遍历数组,对于每个元素,计算出与目标值的差值,判断差值是否在哈希表中即可。时间复杂度为O(n)。

public int[] twoSum(int[] nums, int target) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {
        int complement = target - nums[i];
        if (map.containsKey(complement)) {
            return new int[]{map.get(complement), i};
        }
        map.put(nums[i], i);
    }
    // 如果不存在符合条件的结果,则返回一个空数组
    return new int[0];
}

方法三:双指针法

如果数组是有序的,可以使用双指针的方法,一个指针从数组的开始位置开始,另一个指针从数组的末尾向前移动,比较两个指针所指向的元素的和与目标值的大小关系,根据比较结果调整指针的位置。时间复杂度为O(n)。

public int[] twoSum(int[] nums, int target) {
    int left = 0;
    int right = nums.length - 1;
    while (left < right) {
        int sum = nums[left] + nums[right];
        if (sum == target) {
            return new int[]{left, right};
        } else if (sum < target) {
            left++;
        } else {
            right--;
        }
    }
    // 如果不存在符合条件的结果,则返回一个空数组
    return new int[0];
}

这些都是常见的求两数之和的算法实现方式,选择合适的方法取决于具体的问题要求和数据特点。