力扣经典算法首题:两数之和的 Java 两种实现方式

2024-12-31 00:01:15   小编

力扣经典算法首题:两数之和的 Java 两种实现方式

在力扣(LeetCode)的算法世界中,“两数之和”是一道经典的入门题目。它不仅考验我们对基本数据结构和算法的理解,也为我们后续更复杂的问题打下基础。接下来,让我们一起探讨这道题目的两种 Java 实现方式。

我们来看看最直观的暴力解法。其基本思路是通过两层循环遍历数组中的每一对数字,计算它们的和是否等于目标值。

public class TwoSum {
    public int[] twoSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] + nums[j] == target) {
                    return new int[]{i, j};
                }
            }
        }
        return new int[]{};
    }
}

这种方法虽然简单直接,但时间复杂度为 O(n^2),在处理大规模数据时效率较低。

接下来,介绍一种更高效的解法——使用哈希表。

import java.util.HashMap;

public class TwoSumHash {
    public int[] twoSum(int[] nums, int target) {
        HashMap<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[]{};
    }
}

这种方法通过哈希表存储已经遍历过的数字及其索引,每次计算当前数字的补数是否在哈希表中,时间复杂度降低到了 O(n),大大提高了算法的效率。

在实际应用中,我们需要根据数据规模和性能要求来选择合适的实现方式。对于较小规模的数据,暴力解法可能就足够了;而对于大规模数据,哈希表的解法则更具优势。

“两数之和”这道题虽然看似简单,但通过对不同实现方式的研究和比较,我们可以更深入地理解算法的本质和优化思路,为解决更复杂的问题积累经验。希望大家在算法学习的道路上不断进步,攻克一个又一个的难题!

TAGS: 力扣两数之和 力扣算法题目 Java 实现两数之和 两数之和的 Java 解法

欢迎使用万千站长工具!

Welcome to www.zzTool.com