zoukankan      html  css  js  c++  java
  • 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 }

    测试结果:

  • 相关阅读:
    关于ios6.0和5.0的横竖屏支持方法
    windows环境下搭建vue+webpack的开发环境
    诗歌类网址
    【第1阶段—GIS网址清单】其它杂项
    android内存指标
    Rownum与Order by
    使用反射复制一个JavaBean的对象
    catalog
    oralce中rownum理解
    BlockingQueue
  • 原文地址:https://www.cnblogs.com/wk-missQ1/p/13100357.html
Copyright © 2011-2022 走看看