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


Posted in PHP onAugust 26, 2020

给你一个数组 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) 链接:https://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的栏目导航程序
Oct 09 PHP
php中拷贝构造函数、赋值运算符重载
Jul 25 PHP
关于初学PHP时的知识积累总结
Jun 07 PHP
php缓冲 output_buffering的使用详解
Jun 13 PHP
php_screw 1.5:php加密: 安装与使用详解
Jun 20 PHP
php读取富文本的时p标签会出现红线是怎么回事
May 13 PHP
php获取apk包信息的方法
Aug 15 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
PHP中判断文件存在使用is_file还是file_exists?
Apr 03 PHP
PHP读取文件内容的五种方式
Dec 28 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
Mar 06 PHP
php的lavarel框架中join和orWhere的用法
Dec 28 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 24 #PHP
PHP执行普通shell命令流程解析
Aug 24 #PHP
PHP连接SQL server数据库测试脚本运行实例
Aug 24 #PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 #PHP
WordPress免插件实现面包屑导航的示例代码
Aug 20 #PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 #PHP
Laravel相关的一些故障解决
Aug 19 #PHP
You might like
php的dl函数用法实例
2014/11/06 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
javascript的函数作用域
2014/11/12 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
初中同学聚会邀请函
2014/02/03 职场文书
个人承诺书
2014/03/26 职场文书
企业安全生产标语
2014/06/06 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript
python和anaconda的区别
2022/05/06 Python
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android