Java数组--一个整型数组,给定一个定数,求数组中两个数的和与定数相等
描述给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
你需要输出这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。
你可以假设数组递增有序。请在O(N)时间内完成。例如:给出数组[2,7,11,15],以及目标target=9,则输出[0,1]
1 public class ArraySum { 2 public static void main(String[] args) { 3 int[] arr = {1,1,2,4,5,7,9,11,17,27,35,66,77,99,101}; 4 int num =6; 5 6 Map map1 = getSumToANum(arr,0,arr.length-1,num); 7 System.out.println("第一种方法:"); 8 map1.forEach((k,v)->{ 9 System.out.println("数组中和为"+num+"的组合为:arr["+k+"]和arr["+v+"]的组合"); 10 }); 11 } 12 13 /** 14 * 第一种方法: 15 * @param array 16 * @param start 17 * @param end 18 * @param num 19 * @return 20 * 将有序数组的最小值与最大值进行相加后,与给定数进行比较, 21 * 如果相等,则在数组中找出两个数之和等与给定数; 22 * 如果小于给定数,则从小的位置向后移,在进行比较; 23 * 如果大于给定数,则从大的位置向前移,在进行比较; 24 * 如果直到开始位置大于结束位置时还没有找到这样的两个数时,输出不存在。 25 * 复杂度为O(n)。 26 * 27 */ 28 public static Map<Integer, Integer> getSumToANum(int[] array, int start, int end, int num){ 29 Map<Integer,Integer> map = new HashMap<>(); 30 while (start <= end){ 31 if (num == (array[start]+array[end])){ 32 map.put(start,end); 33 start++; 34 }else if (num > (array[start]+array[end])) 35 start++; 36 else 37 end--; 38 } 39 return map; 40 } 41 42 }
测试结果:
分类:
Java算法
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库