您好读者,让我们现在解决一个leetcode问题。
在此博客中,让我们解决Two Sum,它是Blind 75 List of LeetCode Problems。
两个总和是一个经典的编码挑战,也是LeetCode上的第一问题,它要求我们在数组中找到两个数字,加起来给定目标。
在这篇博客文章中,我们将探讨解决此问题的两种不同的方法:蛮力方法和最佳方法。我们将检查问题陈述,了解测试案例并深入研究两种方法的代码实现。此外,我们将分析每个溶液的时间和空间复杂性。
了解问题:
- 给定整数数组
nums
和一个目标整数target
,任务是在数组中找到两个数字,以使它们的总和等于目标。 - 我们的目标是返回这两个数字的索引。
- 问题还提到,每个输入都将具有 恰好 ,并且您不能两次使用 same element。 li>
了解测试用例:
要更好地理解问题,让我们考虑一些简单的测试用例:
测试案例1:
Input: nums = [2, 7, 11, 15], target = 9
Output: [0, 1]
说明:索引0和1处的数字总和等于9。
的目标值。 测试案例2:
Input: nums = [3, 2, 4], target = 6
Output: [1, 2]
说明:指数1和2处的数字总和等于目标值6。
测试案例3:
Input: nums = [3, 3], target = 6
Output: [0, 1]
说明:索引0和1处的数字总和等于目标值6。
蛮力方法:嵌套环
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] result = new int[2];
for(int i=0; i<nums.length; i++) {
for(int j=i+1; j<nums.length; j++) {
if((nums[i] + nums[j]) == target) {
result[0] = i;
result[1] = j;
return result;
}
}
}
return result;
}
}
关键点:
- 我们浏览数组中的每个数字,然后将其添加到其他每个数字中,以查看其总和是否等于目标。
- 如果我们发现两个数字加利到目标,我们将返回其索引。
时间复杂性: o(n^2)
- 蛮力方法使用嵌套环检查每对数字,从而导致O(n^2)的时间复杂性,其中n是输入阵列的大小。
空间复杂性: o(1)
- 这种方法的空间复杂性是o(1),因为我们只需要固定大小
result
数组来存储索引。
最佳方法:hashmap
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] result = new int[2];
HashMap<Integer, Integer> map = new HashMap<>();
for(int i=0; i<nums.length; i++) {
int numberToFind = target - nums[i];
if(map.containsKey(numberToFind)) {
result[0] = map.get(numberToFind);
result[1] = i;
}
map.put(nums[i], i);
}
return result;
}
}
关键点:
- 对于数组中的每个数字,我们计算目标和该数字之间的差异。
- 我们检查了哈希图中是否存在此差异,这意味着我们找到了一对总计到目标的数字。
- 如果我们找到了这样的一对,我们将返回他们的索引。
- 否则,我们不断将数字及其索引添加到哈希图。
时间复杂性: o(n)
- 最佳方法具有O(n)的时间复杂性,因为我们只能通过输入阵列进行迭代
nums
一次,并且在hashmap中的每个查找操作都需要恒定时间。
空间复杂性: o(n)
- 最佳方法的空间复杂性是o(n),因为在最坏的情况下,我们可能需要将数组的所有元素存储在哈希玛普中。
Google工程师 - 编码访谈样式 - 视频解决方案
https://www.youtube.com/watch?v=XKu_SEDAykw
另外,结帐,NeetCode视频解决方案:
https://www.youtube.com/watch?v=KLlXCFG5TnA
建议学习数据结构和算法的资源
DS算法博客的基础知识:
推荐leetcode问题的YouTuber:
1. NeetCode
免费学习数据结构和算法的资源:
建议学习数据结构和算法的课程:
- NeetCode Courses
- ZTM:掌握编码访谈(Big Tech):可在Udemy和ZTM Academy上使用
- ZTM:掌握编码访谈:可在Udemy和ZTM Academy上使用
- Data Structures & Algorithms, Level-up for Coding Interviews Course
- Become a Job Ready Programmer (Java)
- Striver’s A2Z (Free) Course
学习数据结构和算法的顶级Coursera课程:
- Coding Interview Preparation (Meta)
- Algorithms Course Part I (Princeton University)
- Algorithms Course Part II (Princeton University)
- Data Structures and Algorithms Specialization (UC San Diego)
- Algorithms Specialization (Stanford)
(注意:可以审核Coursera课程以免费获得讲座)
ð披露:请注意,此页面上提到的某些链接可能是会员链接。这意味着,如果您单击以下链接之一并进行购买,我可能会从出售中获得一个小佣金。
我是谁?
我是一个软件工程书呆子Aswin Barath,他喜欢构建Web应用程序,现在在我自由职业生活生活的忙碌期间通过Blogging分享了我的知识。这是我所有我的疯狂的链接,由一个地点下的平台分类:https://linktr.ee/AswinBarath
继续学习
现在,我想这是我说再见。但是,嘿,您是时候开始学习 。 。您已经做到了这么好工作,谢谢 阅读我的博客ð。