软考
APP下载

leetcode两数之和java

题目:LeetCode两数之和Java

LeetCode是一家全球范围内的在线技术实践和授权平台,拥有丰富的算法练习题库。其中最经典的问题之一是“两数之和”,而且这个问题在很多的招聘面试中都经常被问到。

本文将从多个角度分析LeetCode两数之和问题,通过Java语言解决该问题,并给出全文摘要和3个关键词。

1. 问题描述

给定一个整数数组和一个目标值,在数组中找出和为目标值的两个数。你可以按照任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6

输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6

输出:[0,1]

2. 解题思路

2.1 暴力枚举法

最简单的方法就是通过暴力枚举法先固定一个数,然后依次遍历数组中的其它数,判断它们的和是否为目标值。

时间复杂度:O(n^2)

2.2 哈希表法

使用哈希表,遍历一遍数组,将每个数的值和下标存入哈希表中。在遍历数组过程中,判断哈希表中是否存在与当前数相加等于目标值的数,若存在则返回它们的下标。

时间复杂度:O(n)

空间复杂度:O(n)

3. Java代码

3.1 暴力枚举法代码

```

class Solution {

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 };

}

}

}

throw new IllegalArgumentException("No solution found!");

}

}

```

3.2 哈希表法代码

```

class Solution {

public int[] twoSum(int[] nums, int target) {

Map 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);

}

throw new IllegalArgumentException("No solution found!");

}

}

```

4. 总结

在LeetCode两数之和问题中,我们介绍了两种解题思路:暴力枚举法和哈希表法。暴力枚举法的时间复杂度为O(n^2),空间复杂度为O(1);哈希表法的时间复杂度为O(n),空间复杂度为O(n)。并且,在实际的面试过程中,由于暴力枚举法的时间复杂度太高,在数据量大的情况下表现会比较差,因此很多公司并不建议采用。

备考资料 免费领取:软件设计师报考指南+考情分析+思维导图等 立即下载
真题演练 精准解析历年真题,助你高效备考! 立即做题
相关阅读
软件设计师题库