当前位置: 首页 > ai >正文

PHP 实现连续子数组的最大和、整数中1出现的次数

在编程面试和实际应用中,处理数组和整数的常见问题之一是求解连续子数组的最大和以及计算整数中1出现的次数。本文将详细介绍如何使用 PHP 实现这两个问题的解决方案。

连续子数组的最大和

连续子数组的最大和问题要求找到一个数组中的连续子数组,使得该子数组的元素和最大。这可以使用著名的 Kadane 算法来实现,时间复杂度为 O(n)。

Kadane 算法

Kadane 算法通过遍历数组并在每个位置记录当前最大和与全局最大和来找到连续子数组的最大和。算法步骤如下:

  1. 初始化两个变量 max_so_far 和 max_ending_here,分别表示全局最大和和当前最大和。
  2. 遍历数组,对于每个元素,更新 max_ending_here 为当前元素值或当前元素值加上前一位置的 max_ending_here,然后更新 max_so_far
  3. 最终,max_so_far 即为所求结果。

PHP 实现代码

function maxSubArraySum($arr) {$max_so_far = PHP_INT_MIN;$max_ending_here = 0;foreach ($arr as $value) {$max_ending_here = max($value, $max_ending_here + $value);$max_so_far = max($max_so_far, $max_ending_here);}return $max_so_far;
}// 示例
$array = [-2, 1, -3, 4, -1, 2, 1, -5, 4];
echo "连续子数组的最大和是: " . maxSubArraySum($array);
​

分析说明表

步骤操作说明
1初始化 max_so_far 和 max_ending_here分别表示全局最大和和当前最大和
2遍历数组,更新 max_ending_here 和 max_so_far更新当前子数组和与全局最大和
3返回 max_so_far返回全局最大和

整数中1出现的次数

计算一个整数中1出现的次数问题要求统计从1到n的所有整数中数字1出现的总次数。这可以通过逐位分析的方法来解决。

逐位分析法

逐位分析法通过将每个位上的数字分解来统计1出现的次数。主要步骤如下:

  1. 对每一位,计算当前位、低位和高位的值。
  2. 根据当前位的值,计算当前位上1的出现次数。
  3. 累加所有位上1的出现次数。

PHP 实现代码

function countDigitOne($n) {$count = 0;$factor = 1;$lower_num = 0;$current_digit = 0;$higher_num = 0;while ($n / $factor != 0) {$lower_num = $n - ($n / $factor) * $factor;$current_digit = ($n / $factor) % 10;$higher_num = $n / ($factor * 10);if ($current_digit == 0) {$count += $higher_num * $factor;} elseif ($current_digit == 1) {$count += $higher_num * $factor + $lower_num + 1;} else {$count += ($higher_num + 1) * $factor;}$factor *= 10;}return $count;
}// 示例
$n = 13;
echo "从1到$n的整数中,1出现的次数是: " . countDigitOne($n);
http://www.xdnf.cn/news/7320.html

相关文章:

  • 详解Oracle HASH CHAIN和HASH BUCKET
  • TS04:高性能四通道自动灵敏度校准电容触摸传感器
  • 【氮化镓】关态下负栅压对 p-GaN HEMTs 单粒子效应的影响
  • 智慧招生:实时数字人在院校招生中的应用
  • 上路兵线的理解-鳄鱼篇
  • 【工具推荐】--Git详解
  • LightRAG 由入门到精通
  • CSS- 4.5 css + div 布局 简易网易云音乐 官网布置实例
  • R 语言科研绘图第 49 期 --- 热力图-相关性
  • MySQL进阶篇-InnoDB引擎(超细)
  • 大模型预训练、微调、部署、推理用到的工具总结
  • Lambda 表达式底层实现机制 vs 成员函数/静态成员函数可替代性对比
  • 易境通散货拼柜系统:提高货代企业货物配载效率
  • python打卡day30@浙大疏锦行
  • 【强化学习】#6 n步自举法
  • Blaster - Multiplayer P65-PXX : 射击武器
  • 吉林省建筑工程专业技术人员职称评审实施办法
  • (C语言)内存分配函数
  • 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 13.几何着色器(二)爆炸效果修改图元类型
  • BIM+GIS+loT 技术在大中型水库信息化建设中的融合应用
  • [模型优化] 1. 模型转换
  • SeleniumBase - 多合一浏览器自动化框架
  • python重庆旅游系统-旅游攻略
  • CSS 单位详解:px、rem、em、vw/vh 的区别与使用场景
  • day30-模块和库的导入
  • YOLOv8 在单片机上的几种部署方案
  • 贪心算法:多处最优服务次序、删数问题
  • 【WFAS】《Wild Face Anti-Spoofing Challenge 2023: Benchmark and Results》
  • 数据库存储空间告急?磁盘清理与归档策略全解析
  • ebpf程序入门编写