龙空技术网

经典算法题“两数之和”。主要考察数据结构的运用和算法效率

麦田捉泥鳅 68

前言:

今天各位老铁们对“数据结构与算法测试题答案”大体比较看重,兄弟们都想要剖析一些“数据结构与算法测试题答案”的相关资讯。那么小编也在网摘上收集了一些有关“数据结构与算法测试题答案””的相关文章,希望我们能喜欢,朋友们一起来学习一下吧!

题目描述:

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

输入:nums = [2, 7, 11, 15], target = 9 输出:[0, 1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

解题思路:

最直观的解法是使用双重循环遍历数组中的每对数字,检查它们的和是否等于目标值。但这种方法的时间复杂度为 O(n^2),效率较低。

更高效的方法是利用哈希表(在Java中可以使用HashMap)。遍历数组一次,对于每个元素,我们可以检查哈希表中是否存在目标值减去当前元素的值。如果存在,说明我们找到了一对解;如果不存在,则将当前元素及其索引存入哈希表,继续遍历。

这种方法的时间复杂度降低到了 O(n),空间复杂度也是 O(n),因为最坏情况下需要存储数组中的所有元素。

Java代码实现:

Java1import java.util.HashMap;2import java.util.Map;34public class Solution {5    public int[] twoSum(int[] nums, int target) {6        Map<Integer, Integer> numMap = new HashMap<>();7        for (int i = 0; i < nums.length; i++) {8            int complement = target - nums[i];9            if (numMap.containsKey(complement)) {10                return new int[]{numMap.get(complement), i};11            }12            numMap.put(nums[i], i);13        }14        // 由于题目保证有且只有一个解,所以这里不需要写返回语句15        throw new IllegalArgumentException("No two sum solution");16    }1718    public static void main(String[] args) {19        Solution solution = new Solution();20        int[] nums = {2, 7, 11, 15};21        int target = 9;22        int[] result = solution.twoSum(nums, target);23        System.out.println("[" + result[0] + ", " + result[1] + "]");24    }25}

这段Java代码首先定义了一个Solution类,其中的twoSum方法实现了寻找两数之和等于目标值的逻辑。在main方法中,我们创建了Solution实例并调用了twoSum方法来验证其正确性。

标签: #数据结构与算法测试题答案