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 }
  • 相关阅读:
    双向(端)链表、栈、队列
    WPF 3D基础(1)
    静态查找
    栈和队列 迷宫求解
    异步编程Demo
    WPF 3D基础(2)
    串操作
    链栈和链队
    Linux恢复数据
    word文件修复窍门
  • 原文地址:https://www.cnblogs.com/aalex/p/4905051.html
Copyright © 2011-2022 走看看