每日一个小算法之两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1].
这个题目是不是很简单啊。
本文出自凯哥Java(kaigejava)
首先,我们想到的第一种方案就是for循环。嵌套循环。如下:
JAVA代码:
public static void main(String[] args) { Integer [] nums = new Integer []{1,2,0,5,7,9,3}; Integer target = 5; Integer[] returnNums = twoSum(nums,target); System.out.println(JSON.toJSONString(returnNums)); } public static Integer[] twoSum(Integer[] nums, Integer target) { Integer[] returnNums = new Integer[2]; for (int i = 0; i < nums.length; i++) { for (int j = i+1; j < nums.length; j++) { int num1 = nums[i]; int num2 = nums[j]; if ((num1 + num2) == target) { returnNums[0] = i; returnNums[1] = j; return returnNums; } } } return returnNums; }
运行结果:
执行结果是出来了。我们看看执行时间:
是不是很low的一种方法。
那么接下来,我们看看第二中算法:
第二种算法和巧妙。Java代码如下:
private Integer[] twoSum2(Integer[] nums, Integer target) { Integer[] indexs = new Integer[2]; // 建立k-v ,一一对应的哈希表 HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>(); for(int i = 0; i < nums.length; i++){ if(hash.containsKey(nums[i])){ indexs[0] = i; indexs[1] = hash.get(nums[i]); log.info(JSON.toJSONString(hash)); return indexs; } // 将数据存入 key为补数 ,value为下标 hash.put(target-nums[i],i); log.info("==>:{},i=:{},target-nums[i]:{}",nums[i],i,target-nums[i]); } return indexs; }
其中巧妙的地方:
再来看看运行结果:
看看两个算法对比:
再速度上是不是快了很多。
欢迎大家留下更好的算法。一起学习,一起成长
相关推荐
由于MD5的这种特性,它常用于数据完整性的校验和密码存储,尽管现在已知MD5存在碰撞问题,即两个不同的输入可能会得到相同的MD5值,但这并不影响在我们的场景中使用,因为我们关注的是密码的每日变化而非绝对不可...
我们可以使用两个指针,分别指向两个数组的当前元素,然后将较小的元素添加到结果数组中,直到其中一个数组结束。这种方法的时间复杂度为 O(n),空间复杂度为 O(1)。 本资源提供了多种算法题目,涵盖了队列实现栈、...
"算法每日一题" 以下是根据给定文件信息生成的相关知识点: 一、算法编程大题 1. 手串艺人的问题:这个问题考察了字符串匹配和环形结构的处理能力。需要判断手串上的颜色是否符合要求,即任意一种颜色在任意连续...
且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此塔将毁损,而也就是世界末日来临之时。 费式数列(Fibonacci Sequence)是1200年代的欧洲数学家Leonardo Fibonacci在...
经典算法题每日演练——第四题 最长公共子序列 经典算法题每日演练——第三题 猴子吃桃 经典算法题每日演练——第二题 五家共井 经典算法题每日演练——第一题 百钱买百鸡 开发利器系列(1)介绍一个小工具 ...
竞赛的评估标准是通过计算预测的(用户数-品牌数)对的准确率和召回率来得到算法成绩F1-SCORE。准确率是指预测正确的用户-品牌对在所有预测中的比例,召回率是指预测正确的用户-品牌对在实际所有购买品牌对中的比例...
通过"helloalgorithm:每日算法"项目,开发者可以系统地学习和实践这些算法,逐步建立起扎实的算法基础,从而在解决实际问题时更加游刃有余。不断积累和练习,将使你在面对复杂编程挑战时更加自信,成为真正的Java...
"蓝桥杯ACM算法比赛模拟题30天每日训练.zip"这个压缩包文件是针对蓝桥杯ACM算法比赛的训练资源,旨在帮助参赛者进行为期30天的日常练习,以提升他们的编程和算法解决能力。蓝桥杯是一项国内知名的编程竞赛,主要考察...
3. 情话推荐算法:为了实现每日推荐功能,可能需要一种算法来决定哪条情话会在特定日期显示。这可以是简单的随机选择,也可以基于用户喜好、历史查看记录等复杂策略。 4. 用户界面设计:为了让用户体验流畅且吸引人...
对于超过2的参赛者数量,则通过递归方式分为两个小组,并分别对这两个小组应用同样的算法。 4. **配对规则**:在递归过程中,通过调整数组元素的方式,确保每个选手每天都有比赛,并且每两天内不重复对手。 5. **...
每种模式都有特定的逻辑顺序图和特性描述,如基本定时器在Set信号变为1后,经过设定时间后,DO输出一个运算周期的脉冲;而滞后置位型定时器在Set信号变为1并保持超过设定时间后,DO才会变为1。 2. 定时器优化算法块...
例如,“2维词组”指的是由两个相邻单词组成的组合,这是算法处理的基本单元。通过对这些词组的统计与排序,算法能够揭示文本数据中隐藏的词汇共现模式,为用户提供深度洞察和分析依据。 #### 实验结果与分析 实验...
总结来说,这篇研究探讨了一种基于供应链管理的采购算法,利用马尔科夫决策过程和动态规划来优化库存水平和总成本。这种方法通过综合考虑价格、需求、供应商反馈和库存成本,帮助企业做出更明智的采购决策,以应对多...
这个代码使用了迭代算法,使用两个变量 per1 和 per2 来存储前两个数字的和,最后返回 per2 作为结果。这个算法的执行效率远远高于递归算法。 在解决这个问题时,我们需要注意以下几点: 1. 仔细分析问题的特点和...
两数之和 题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素...
自己总结的leetcode新人必刷30题 含详细注解
本项目“随机生成每日菜单微信小程序”便是一个利用微信小程序平台,结合数据存储和随机算法,为用户提供便捷的日常菜单规划的小工具。以下是关于该项目的技术细节和实现方法。 首先,我们关注到“使用微信...
这类算法旨在一次性扫描识别出多个模式串在给定字符串中的位置。 多模式匹配算法主要分为三类:基于有限状态自动机(FSA)的算法,如Aho-Corasick(AC)算法;基于Hash散列的算法,如Wu-Manber(WM)算法;以及其他...