【算法之旅】(No.1-两数之和) | Java刷题打卡

简介: 【算法之旅】(No.1-两数之和) | Java刷题打卡

题目描述


输入参数:


  • 一个整数数组 numbers,数组长度范围暂定为 [2,103],且内部值范围[-109,109]
  • 一个整数字段 target,值范围[-109,109]


题目逻辑:


  • 请你在该数组中找出和为目标值的那两个整数



输出结果:


  • 返回相加的和为目标值的那两个整数,并返回他们的数组下标



特别说明:

  • 禁止:重复利用这个数组中同样的元素
  • 假设:每种输入只会对应一个答案




题目示例



示例 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]
复制代码





思路分析


暴力破解法


  • 暴力破解法:

  • 遍历每个元素a,并查找是否存在一个值b与target-a相等的目标元素

  • 遍历每个元素a,并查找是否存在一个值b满足a+b=target的条件




哈希表解法


事实证明,我们可以一次完成。在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回


image.png


AC代码:


暴力破解法

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0, n = nums.length; i < n; ++i) {
            int num = target - nums[i];
            if (map.containsKey(num)) {
                //找到结果 直接返回
                return new int[]{map.get(num), i};
            }
            map.put(nums[i], i);
        }
        return null;
    }
}
复制代码



哈希表解法

class Solution {
    public int[] twoSum(int[] nums, int target) {
        for(int i = 0, l = nums.length; i < l ; i++){
            for(int j = i+1 ; j<l ; j++ ){
                if(target==(nums[i]+nums[j])){
                    return new int[]{i,j};
                }
            }
        }
        return new int[]{-1,-1};
    }
}
复制代码




总结:


总体而言,针对于相关的暴力破解的方案和哈希表解法之外,也许会存在更好的解法,依靠于更强大的数据结构,希望有更好解法的小伙伴们可以多多提供思路哈。







相关文章
|
1月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
23 1
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
23 0
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 392. 判断子序列 详细解读
[Java·算法·简单] LeetCode 392. 判断子序列 详细解读
28 0
|
1月前
|
存储 canal 算法
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
23 0
|
1月前
|
算法 Java
[Java·算法·中等] LeetCode15. 三数之和
[Java·算法·中等] LeetCode15. 三数之和
30 0
|
1天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
13天前
|
算法
算法系列--链表刷题(二)(下)
算法系列--链表刷题(二)(下)
16 0
|
16天前
|
算法 安全 Java
java代码 实现AES_CMAC 算法测试
该代码实现了一个AES-CMAC算法的简单测试,使用Bouncy Castle作为安全提供者。静态变量K定义了固定密钥。`Aes_Cmac`函数接受密钥和消息,返回AES-CMAC生成的MAC值。在`main`方法中,程序对给定的消息进行AES-CMAC加密,然后模拟接收ECU的加密结果并进行比较。如果两者匹配,输出&quot;验证成功&quot;,否则输出&quot;验证失败&quot;。辅助方法包括将字节转为16进制字符串和将16进制字符串转为字节。
|
26天前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
33 0