zoukankan      html  css  js  c++  java
  • 搜索插入位置

    要求:

    给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。 
    你可以假设在数组中无重复元素。

    样例:

    [1,3,5,6],5 → 2 
    [1,3,5,6],2 → 1 
    [1,3,5,6], 7 → 4 
    [1,3,5,6],0 → 0

    算法要求:

    O(log(n)) time

    解题思路:

    就是二分查找

     1 <?php
     2 //给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置(数组无重复元素)
     3 
     4 //二分查找
     5 function solution($data, $target)
     6 {
     7     if(empty($data) || !is_numeric($target))
     8     {
     9         return [false, -1];
    10     }
    11     
    12     $low = 0;
    13     $high = count($data) - 1;
    14     while($low <= $high)
    15     {
    16         $mid = ceil(($low + $high) / 2);
    17         if($target == $data[$mid]) {
    18             return [true, $mid];
    19         } else if($data[$mid] < $target) {
    20             $low = $mid + 1;
    21         } else {
    22             $high = $mid - 1;
    23         }
    24     }
    25     return [false, $low];
    26 }
    27 
    28 $arr = [1, 3, 5, 6];
    29 $target = 4;
    30 $res = solution($arr, $target);
    31 echo "<pre>";
    32 print_r($res);
  • 相关阅读:
    luogu P1075 质因数分解
    luogu P1146 硬币翻转
    [HEOI2013]SAO
    [HAOI2010]软件安装
    [CodeForces-763C]Timofey and remoduling
    [CodeForces-375E]Red and Black Tree
    [CodeForces-178F]Representative Sampling
    [CodeForces-55D]Beautiful Numbers
    [AHOI2009]同类分布
    [ZJOI2010]数字计数
  • 原文地址:https://www.cnblogs.com/573583868wuy/p/8859215.html
Copyright © 2011-2022 走看看