Leetcode基础刷题之PHP解析(268. Missing Number)

栏目: PHP · 发布时间: 7年前

2 0 1 9 - 4 -18   星 期四     开 始 吧

上 一 题 链 接   Leetcode基础刷题之 PHP 解析(263. Ugly Number)

Leetcode基础刷题之PHP解析(268. Missing Number)

题 目 描 述

查找缺失的数。给你一组数组,查找从0-n中缺少的整数。有点坑爹的是如果给你的是[0,1,2],为了返回回来的都是有缺失的数,所以这里应该返回3。

题 目 分 析

解法很多。第一种就是迭代他哪个位置空缺返回哪个数,如果都没有返回数组最后一个数加1。

 /**
     * @param Integer[] $nums
     * @return Integer
     */
    function missingNumber($nums) {
        sort($nums);
        for($i=0;$i<count($nums);$i++){
            if(!in_array($i,$nums)){
                return $i;
            }
        }
        return $nums[count($nums)-1]+1;
    }

解法二

使用二分查找,每次获取中间元素的下标和下标对应的值进行比较,如果下标对应的值大于元素下标,说明缺失的数字在右边,把右边赋值给中间下标,否则左边就来到中间下标的下一个位置。

 /**
     * @param Integer[] $nums
     * @return Integer
     */
    function missingNumber($nums) {
        sort($nums);
        $left=0;$right=count($nums);
        while($left<$right){
            $mid=$left+intval(floor(($right-$left)/2));
            if($nums[$mid]>$mid) {
                $right=$mid;
            }else{
                $left=$mid+1;
            }
            
        }
        return $right;
    }

解法三

可能你已经发现了, 以上两个操作都先把数组进行排序,那么在效率上就....,所以还能不能有其他解法,异或。因为0-n之间缺少一个数,我们只要把完整的数组和缺少1个的数组异或一下,相同的都变成0,多出来的当然就是缺少的哪个数。

 /**
     * @param Integer[] $nums
     * @return Integer
     */
    function missingNumber($nums) {
        $res=0;
        for($i=0;$i<count($nums);$i++){
            $res ^=($i+1) ^ $nums[$i];
        }
        return $res;
    }

Github整理地址:https://github.com/wuqinqiang/leetcode-php


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

垃圾回收的算法与实现

垃圾回收的算法与实现

中村成洋、相川光 / 丁灵 / 人民邮电出版社 / 2016-7-1 / 99.00元

★ Ruby之父Matz作推荐语:上古传承的魔法,彻底揭开垃圾回收的秘密! ★ 日本天才程序员兼Lisp黑客竹内郁雄审校 本书前半介绍基本GC算法,包括标记-清除GC、引用计数、复制算法的GC、串行GC的算法、并发GC的算法等。后半介绍V8、Rubinius、Dalvik、CPython等几种具体GC的实现。本书适合各领域程序员阅读。一起来看看 《垃圾回收的算法与实现》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具