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 }
  • 相关阅读:
    双目对物体定位
    七个不变特征识别
    bmp和opencv格式转换
    职业规划
    input disp fprintf用法
    多线程
    访问权限
    机器人运动学仿真
    MOTOCOM32运动控制器编程
    回调函数以及钩子函数的概念
  • 原文地址:https://www.cnblogs.com/aalex/p/4905051.html
Copyright © 2011-2022 走看看