利用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 操作文件的一些FAQ总结
Feb 12 PHP
php cli 方式 在crotab中运行解决
Feb 08 PHP
php中转义mysql语句的实现代码
Jun 24 PHP
php数字转汉字代码(算法)
Oct 08 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
Apr 02 PHP
彻底删除thinkphp3.1案例blog标签的方法
Dec 05 PHP
PHP利用APC模块实现文件上传进度条的方法
Jan 26 PHP
orm获取关联表里的属性值
Apr 17 PHP
PHP中的print_r 与 var_dump 输出数组
Jun 13 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
php操作redis命令及代码实例大全
Nov 19 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和XSL stylesheets转换XML文档
2006/10/09 PHP
PHP与MySQL交互使用详解
2006/10/09 PHP
php读取xml实例代码
2010/01/28 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
提高javascript效率 一次判断,而不要次次判断
2012/03/30 Javascript
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
基于js实现checkbox批量选中操作
2016/11/22 Javascript
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
ES6箭头函数和扩展实例分析
2020/05/23 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
Python使用OpenCV进行标定
2018/05/08 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
PageFactory设计模式基于python实现
2020/04/14 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
css3实现椭圆轨迹旋转的示例代码
2018/10/29 HTML / CSS
展会邀请函范文
2014/01/26 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
《火烧云》教学反思
2016/02/23 职场文书
如何写好活动总结
2019/06/21 职场文书
Python 数据可视化之Bokeh详解
2021/11/02 Python