两个总和Java解决方案
#教程 #java #算法 #datastructures

您好读者,让我们现在解决一个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算法博客的基础知识:

1. Hashing in Java

推荐leetcode问题的YouTuber:

1. NeetCode

2. Take U Forward

免费学习数据结构和算法的资源:

1. NeetCode Roadmap

2. Striver’s SDE Sheet

建议学习数据结构和算法的课程:

  1. NeetCode Courses
  2. ZTM:掌握编码访谈(Big Tech):可在UdemyZTM Academy上使用
  3. ZTM:掌握编码访谈:可在UdemyZTM Academy上使用
  4. Data Structures & Algorithms, Level-up for Coding Interviews Course
  5. Become a Job Ready Programmer (Java)
  6. Striver’s A2Z (Free) Course

学习数据结构和算法的顶级Coursera课程:

  1. Coding Interview Preparation (Meta)
  2. Algorithms Course Part I (Princeton University)
  3. Algorithms Course Part II (Princeton University)
  4. Data Structures and Algorithms Specialization (UC San Diego)
  5. Algorithms Specialization (Stanford)

(注意:可以审核Coursera课程以免费获得讲座)

ð披露:请注意,此页面上提到的某些链接可能是会员链接。这意味着,如果您单击以下链接之一并进行购买,我可能会从出售中获得一个小佣金。

我是谁?

我是一个软件工程书呆子Aswin Barath,他喜欢构建Web应用程序,现在在我自由职业生活生活的忙碌期间通过Blogging分享了我的知识。这是我所有我的疯狂的链接,由一个地点下的平台分类:https://linktr.ee/AswinBarath

继续学习

现在,我想这是我说再见。但是,嘿,您是时候开始学习 。 。您已经做到了这么好工作,谢谢 阅读我的博客ð。