zoukankan      html  css  js  c++  java
  • 微软算法100题14 在排序数组中找到和为指定数的任意两个元素

    第14 题:
    题目:输入一个已经按升序排序过的数组和一个数字,
    在数组中查找两个数,使得它们的和正好是输入的那个数字。
    要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
    例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4 和11

    思路:因为是已排好序的数组且为升序,则可以在头尾各设置两个指针,依次向中间移动,直到找到和为指定值的两个元素即可,移动指针时,如果两个元素相加大于target,则应该将尾指针向左移动,因为尾指针对应的元素值较大,反之则将头指针向右移动,因为头指针对应的元素较小。

     1 package com.rui.microsoft;
     2 
     3 public class Test14_FindTwoElemsInSortArray {
     4 
     5     public static void main(String[] args) {
     6         int[] array = {1,2,4,7,11,15};
     7         Test14_FindTwoElemsInSortArray.find(array, 15);
     8     }
     9     
    10     public static void find(int[] array, int target){
    11         int start = 0, end = array.length - 1;
    12         
    13         //move pointers from both head and tail
    14         //until they intersects
    15         while(start < end){
    16             if(array[start] + array[end] == target) break;
    17             if(array[start] + array[end] > target) end--;
    18             if(array[start] + array[end] < target) start++;
    19         }
    20         
    21         if(start >= end){
    22             System.out.println("NOT FIND!");
    23         }else{
    24             System.out.println("FIND! " + array[start] + " " + array[end]);
    25         }
    26     }
    27 }
  • 相关阅读:
    PHP 中 define() 和 const 定义常量时的区别
    tar 解压常用压缩文件格式命令大全
    JVM的GC策略
    守护线程(Daemon Thread)
    探索HashMap实现原理及其在jdk8数据结构的改进
    Java面试& HashMap实现原理分析
    Java分布式应用
    全面理解Java内存模型
    Java& Vector与ArrayList区别
    深入理解Java虚拟机&运行时数据区
  • 原文地址:https://www.cnblogs.com/aalex/p/4905051.html
Copyright © 2011-2022 走看看