• 搜索插入位置


    要求:

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

    样例:

    [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);
  • 相关阅读:
    P1087 FBI树 二叉树
    回顾测试和测试方法
    Postman
    执行用例的思路、批量执行(可选)、定时任务
    unittest平台分析与建表:
    HTMLTestRunner源码
    665. Non-decreasing Array
    661. Image Smoother
    643. Maximum Average Subarray I
    628. Maximum Product of Three Numbers
  • 原文地址:https://www.cnblogs.com/573583868wuy/p/8859215.html
Copyright © 2020-2023  润新知