利用PHP计算有多少小于当前数字的数字方法示例

 更新时间:2020-09-24 15:02:28   作者:佚名   我要评论(0)

给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j

给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。

果博东方换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。

以数组形式返回答案。

示例 1:

输入:nums = [8,1,2,2,3]
输出:[4,0,1,1,3]
解释:
对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。
对于 nums[1]=1 不存在比它小的数字。
对于 nums[2]=2 存在一个比它小的数字:(1)。
对于 nums[3]=2 存在一个比它小的数字:(1)。
果博东方 对于 nums[4]=3 存在三个比它小的数字:(1,2 和 2)。

示例 2:

输入:nums = [6,5,4,8]
输出:[2,1,0,3]

示例 3:

输入:nums = [7,7,7,7]
果博东方 输出:[0,0,0,0]

提示:

  • 2 <= nums.length <= 500
  • 0 <= nums[i] <= 100

来源:力扣(LeetCode) 链接:http://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number

解题思路 1

枚举数组里的每个数字,遍历数组统计有多少数字比当前数字小即可

代码

class Solution {

 /** * @param Integer[] $nums * @return Integer[] */
 function smallerNumbersThanCurrent($nums) {
  $count = count($nums);
  $result = array_fill(0, $count, 0);
  for ($i = 0; $i < $count; $i++) {
   for ($j = 0; $j < $count; $j++) {
    if ($nums[$j] < $nums[$i]) {
     $result[$i]++;
    }
   }
  }

  return $result;
 }
}

解题思路 2 - 频次数组+前缀和

果博东方注意到数字的值域范围为 [0,100][0,100] ,所以可以考虑建立一个频次数组 cnt[i]cnt[i] ,表示数字 ii 出现的次数,那么对于数字 ii 而言,它的答案:即小于它的数字出现个数之和,直接算需要遍历 [0,i-1][0,i−1] 的 cntcnt 求和,仍需要线性的时间去计算,但我们注意到这个答案是一个前缀和,所以我们可以再对 cntcnt 数组求前缀和。那么对于数字 ii 的答案就是 cnt[i-1]cnt[i−1] ,算答案的时间复杂度从 O(n)O(n) 降到了 O(1)O(1) 。

果博东方最后整个算法流程为:遍历数组元素,更新 cntcnt 数组,即 cnt[nums[i]]+=1 ,然后对 cntcnt 数组求前缀和,最后遍历数组元素,对于相应的数字 O(1)O(1) 得到答案即可。

果博东方计数排序是一种特殊的桶排序,一般适用于排序数据长度n远大于种类k的情况。比如本题k=101,n=500,甚至5000。

代码

class Solution {

 /** * @param Integer[] $nums * @return Integer[] */
 function smallerNumbersThanCurrent($nums) {
  $count = count($nums);
  $cnt = array_fill(0, 101, 0); // 填充 0 的计数数组
  $result = array_fill(0, $count, 0); // 填充 0 的结果数组

  // $nums 中出现的值和数量对应落到 $cnt 中
  foreach ($nums as $num) {
   $cnt[$num]++;
  }

  // $cnt 转化成 $i 的值是 sum($cnt[0], .. $cnt[$i - 1]) 新数组,即为小于 $i 的数据数量
  foreach (range(1, 100) as $i) {
   $cnt[$i] += $cnt[$i - 1];
  }

  // 结果数组中出现的 索引值 替换为 计数数组中的 数量
  foreach (range(0, $count - 1) as $i) {
   if ($nums[$i]) {
    $result[$i] = $cnt[$nums[$i] - 1];
   }
  }

  return $result;
 }
}

参考链接

果博东方leetcode 官方题解

总结

到此这篇关于利用PHP计算有多少小于当前数字的数字的文章就介绍到这了,更多相关PHP计算小于当前数字内容请搜索脚本之家以前的文章或继续浏览下面的果博东方相关的文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • php用正则判断是否为数字的方法
  • php判断输入是否是纯数字,英文,汉字的方法
  • php 快速判断一个数字属于什么范围的实现方法
  • php数字游戏 计算24算法
  • PHP 计算至少是其他数字两倍的最大数的实现代码

果博东方相关的文章

  • 利用PHP计算有多少小于当前数字的数字方法示例

    利用PHP计算有多少小于当前数字的数字方法示例

    给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。 换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j
    2020-09-24
  • Laravel登录失败次数限制的实现方法

    Laravel登录失败次数限制的实现方法

    在用户身份验证的情况下,Laravel 具有内置的身份验证系统。我们可以根据要求轻松修改它。身份验证中包含的功能之一是Throttling. 为什么我们需要throttling保护?
    2020-09-24
  • 50个优秀经典PHP算法大集合 附源码

    50个优秀经典PHP算法大集合 附源码

    简介: 实际PHP开发工作当中,只需要使用官方提供的函数即可满足,不需要研究算法,不过算法研究是一个很有意义的事情, 每个算法都是一种思想的结晶 , 学习优秀的思
    2020-09-24
  • 安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题

    安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题

    我们以 PHP 扩展 zip 为例 访问PHP 官方插件库 搜索我们所需要的扩展 zip,我们选择最新的 stable 版本,进行下载 解压 tgz 下载到本地后,使用 tar -zxvf filenam
    2020-09-24
  • 有关PHP 中 config.m4 的探索

    有关PHP 中 config.m4 的探索

    最近在看php扩展相关的东西,虽然来来回回编辑了好多次config.m4,并且也在技术社区看到了 config.m4是什么?什么作用? 类的问题,但是还是觉得有必要在深入的了解下
    2020-09-24
  • php实现简易计算器

    php实现简易计算器

    php实现简易计算器,功能齐全,供大家参考,具体内容如下 包含了计算器中的所有功能 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>
    2020-09-24
  • PHP实现简单的计算器

    PHP实现简单的计算器

    本文实例为大家分享了PHP实现简单计算器的具体代码,供大家参考,具体内容如下 caculator.php <html> <head> </head> <body> <&#63;php if (!empty($_POST))
    2020-09-24
  • PHP实现简易图形计算器

    PHP实现简易图形计算器

    本文实例为大家分享了PHP实现简易图形计算器的具体代码,供大家参考,具体内容如下 主函数:index.php <!doctype html> <html> <head> <meta charset="utf-8"> <t
    2020-09-24
  • PHP数组Key强制类型转换实现原理解析

    PHP数组Key强制类型转换实现原理解析

    PHP是弱类型语言,就像JavaScript一样,在定义变量时,不需要强制指定变量的类型。同时,PHP又有着强大的数组功能,数组的Key即可以是普通的数字类型下标,也可以是
    2020-09-24
  • PHP实现计算器小功能

    PHP实现计算器小功能

    本文实例为大家分享了PHP实现计算器小功能的具体代码,供大家参考,具体内容如下 <&#63;php if (isset($_POST['sub'])) { $f = true; $error = "有以上问题: <
    2020-09-24

最新评论

人民至上造福人民吉林禁止居民进京烟火里的尘埃天使与龙的轮舞中国男篮马德里竞技nba总决赛nba总决赛