希赛考试网
首页 > 软考 > 软件设计师

leetcode两数之和java

希赛网 2024-02-03 13:48:13

题目: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)。并且,在实际的面试过程中,由于暴力枚举法的时间复杂度太高,在数据量大的情况下表现会比较差,因此很多公司并不建议采用。

微信扫一扫,领取最新备考资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考报考咨询

微信扫一扫,定制学习计划