layout: posttitle: PHP 计算0~n-1中缺失的数字
subtitle: PHP 计算0~n-1中缺失的数字
date: 2020-08-06
author: he xiaodong
header-img: img/default-post-bg.jpg
catalog: true
tags:
- Go
- PHP
- LeetCode

0~n-1中缺失的数字

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

示例 1:

  1. 输入: [0,1,3]
  2. 输出: 2

示例 2:

  1. 输入: [0,1,2,3,4,5,6,7,9]
  2. 输出: 8

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof

解题思路

简单的二分查找,题意明确了所有数是递增的,且所有数的取值范围均在 [0, n-1] 上并且是唯一的,因此可以发现这样一个规律:

  • 只要查询过程中 nums[i] == i,那么缺失的值一定在i的右侧;
  • 如果查询过程中 nums[i] > i,那么缺失的值一定在左侧; 所以最后只要返回 min 即为结果。

代码
  1. class Solution {
  2. /**
  3. * @param Integer[] $nums
  4. * @return Integer
  5. */
  6. function missingNumber($nums) {
  7. $min = 0;
  8. $max = count($nums) - 1;
  9. while ($min <= $max) {
  10. $mid = (int)($min + ($max - $min) / 2);
  11. $mid == $nums[$mid] ? $min = $mid + 1 : $max = $mid - 1;
  12. }
  13. return $min;
  14. }
  15. }

最后恰饭 阿里云全系列产品/短信包特惠购买 中小企业上云最佳选择 阿里云内部优惠券