Java实现两数之和「建议收藏」

Java实现两数之和「建议收藏」给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。即:每个index上的数字只能用一次示例:给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[0,1]方法一:暴力法遍历每个元素x,并查找是否存在一个值与target…

大家好,又见面了,我是你们的朋友全栈君。

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。即:每个index上的数字只能用一次

示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

1.方法一:暴力法

遍历每个元素x,并查找是否存在一个值与target−x相等的目标元素。

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[j] == target - nums[i]) { 
   
                return new int[] { 
    i, j };
            }
        }
    }
    throw new IllegalArgumentException("No two sum solution");
}

2.方法二:两遍哈希表

一个简单的实现使用了两次迭代。在第一次迭代中,我们将每个元素的值和它的索引添加到表中。然后,在第二次迭代中,我们将检查每个元素所对应的目标元素(target−nums[i])是否存在于表中。注意,该目标元素不能是nums[i]本身!

public int[] twoSum(int[] nums, int target) { 
   
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) { 
   
        map.put(nums[i], i);
    }
    for (int i = 0; i < nums.length; i++) { 
   
        int complement = target - nums[i];
        if (map.containsKey(complement) && map.get(complement) != i) { 
   
            return new int[] { 
    i, map.get(complement) };
        }
    }
    throw new IllegalArgumentException("No two sum solution");
}

3.方法三:一遍哈希表

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

public int[] twoSum(int[] nums, int target) { 
   
    Map<Integer, Integer> 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 two sum solution");
}

本文参考:
https://leetcode-cn.com/problems/two-sum/solution/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130468.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [技术分享]OSI七层模型详解

    [技术分享]OSI七层模型详解

    2022年2月18日
    52
  • Html中的空格符「建议收藏」

    Html中的空格符「建议收藏」&nbsp;1,Html中空格&amp;nbsp;&amp;#160;&nbsp;不断行的空白(1个字符宽度)&amp;ensp;&nbsp;&amp;#8194;半个空白(1个字符宽度)&amp;emsp;&amp;#8195;一个空白(2个字符宽度)&amp;thinsp;&nbsp;&amp;#8201;窄空白(小于1个字符宽度)&n…

    2022年10月4日
    5
  • Android程序员的年终总结「建议收藏」

    Android程序员的年终总结「建议收藏」欢迎您能进来,如果你也和我一样,对接下来的工作行情充满了太多的不确定性,那不妨停下您冲忙前进的脚步,和我一起重新刷新一下你自己的看法和规划吧!我的提问2019年Android真的还可以养活你自己? 2019年我的工作重心在哪一块? 2019年是继续留在原地做技术积累还是考虑跳槽? 对过去2018年的总结是否满意?我能做什么管理方向(天赋欠缺,暂不做讨论) 技术方向从An…

    2022年6月14日
    37
  • 读取与修改其他程序的数据Read/WriteProcessMemory[通俗易懂]

    读取与修改其他程序的数据Read/WriteProcessMemory[通俗易懂]要修改或读取其他进程的数据,首先要知道几个知识:一、1.windows系统为每个程序分配4GB的虚拟内存,虚拟内存由“页文件”实现。     2.每个程序的4GB空间的前2GB是程序的私有空间,后2GB是系统的空间。     3.每个页文件4KB。     4.在程序私有的2GB中,windows98系列的系统的程序的可用地址为4MB–2GB

    2025年11月6日
    3
  • 上位机控制plc输出教程_上位机读取plc

    上位机控制plc输出教程_上位机读取plc图解PLC编程入门可编程逻辑控制器是种专门为在工业环境下应用而设计的数字运算操作电子系统,它采用一种可编程的存储器在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,通过数字式或模拟式的输入输出来控制各种类型的机械设备或生产过程。PLC的定义可编程序控制器是一种数字运算操作电子系统,专为在工业环境下应用而设计。它采用了可编程序的存储器,用来在其内部存储执行逻辑运算、顺序控制、定时…

    2025年10月8日
    2
  • windows关闭端口方法[通俗易懂]

    windows关闭端口方法[通俗易懂]windows关闭端口方法在介绍各种端口的作用前,这里先介绍一下在Windows中如何关闭/打开端口,因为默认的情况下,有很多不安全的或没有什么用的端口是开启的,比如Telnet服务的23端口、FT

    2022年8月5日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号