【小f的刷题笔记】(JS)阶乘 - 阶乘后的零 LeetCode172 阶乘函数后K个零 LeetCode793

news2024/12/25 14:40:17

【阶乘】

一、阶乘后的零:

LeetCode172

链接:

172.阶乘后的零

题目:

在这里插入图片描述

思路:

0的产生是一定是因为2*5产生的,所以就是找因数
并且,可想而知,找的到因数5,必然找的到因数2与之搭配(只要是偶数就可以找的到2)
👉 题目转化为找因数5的个数

代码:

/**
 * @param {number} n
 * @return {number}
 */
var trailingZeroes = function(n) {
    let res = 0
    for(; n/5 > 0; n/=5) {
        res += Math.floor(n/5)
        // 这里一定要加一下Math.floor 不然结果是错的
    }
    return res
};

二、阶乘函数后K个零

LeetCode793

链接:

793.阶乘函数后K个零

题目:

在这里插入图片描述

思路:

这道题就是利用一个求阶乘尾数为0的数量的函数,再利用二分查找寻找到尾数为0的数量是k的左右边界,从而得出这样的数有多少个

👉 参考 172.阶乘后的零 中求阶乘后尾数0的数量的函数
👉 参考 34.在排序数组中查找元素的第一个和最后一个位置 中二分查找找到左右边界的函数

代码:

/**
 * @param {number} k
 * @return {number}
 */
var preimageSizeFZF = function(k) {
    return right_bound(k) - left_bound(k) + 1
};

var trailingZero = function(d) {
    let res = 0
    for(; d/5 > 0; d/=5) {
        res += Math.floor(d/5)
    }
    return res
}

var left_bound = function(target) {
    let left = 0, right = Number.MAX_VALUE-1
    while(left <= right) {
        let mid = left + Math.floor((right - left) / 2)
        if(trailingZero(mid) >= target) {
            right = mid - 1
        } else {
            left = mid + 1
        }
    }
    return left
}

var right_bound = function(target) {
    let left = 0, right = Number.MAX_VALUE-1
    while(left <= right) {
        let mid = left + Math.floor((right - left) / 2)
        if(trailingZero(mid) <= target) {
            left = mid + 1
        } else {
            right = mid - 1
        }
    }
    return right
}

附:二分查找寻找左右边界的模板(JS版)

1 寻找左侧边界的二分搜索

var left_bound = function(nums, target) {
    let left = 0, right = nums.length - 1;
    // 搜索区间为 [left, right]
    while (left <= right) {
        let mid = left + (right - left) / 2;
        if (nums[mid] < target) {
            // 搜索区间变为 [mid+1, right]
            left = mid + 1;
        } else if (nums[mid] > target) {
            // 搜索区间变为 [left, mid-1]
            right = mid - 1;
        } else if (nums[mid] == target) {
            // 收缩右侧边界
            right = mid - 1;
        }
    }
    // 判断 target 是否存在于 nums 中
    // 此时 target ⽐所有数都⼤,返回 -1
    if (left == nums.length) return -1;
    // 判断⼀下 nums[left] 是不是 target
    return nums[left] == target ? left : -1;
}

2 寻找右侧边界的二分搜索

var right_bound = function(nums, target) {
    let left = 0, right = nums.length - 1;
    while (left <= right) {
        let mid = left + (right - left) / 2;
        if (nums[mid] < target) {
            left = mid + 1;
        } else if (nums[mid] > target) {
            right = mid - 1;
        } else if (nums[mid] == target) {
        // 这⾥改成收缩左侧边界即可
            left = mid + 1;
        }
    }
    // 最后改成返回 left - 1
    if (left - 1 < 0) return -1;
    return nums[left - 1] == target ? (left - 1) : -1;
}

写在最后:
二分查找有点感觉了
继续刷!冲!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】深入理解B+树索引

文章目录1. 前言2. 索引方案3. InnoDB的索引方案4. 索引的分类4.1 聚簇索引4.2 二级索引4.3 联合索引5. InnoDB中的B树索引的注意事项5.1 内节点中目录项记录的唯一主5.2 一个页至少容纳2条记录6. MyISAM中的索引⽅案简单介绍1. 前言 索引&#xff0c;是MySQL快速查询的秘籍。…

ARMv8/ARMv9:深入理解MPIDR_EL1寄存器中的affinity

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈官方文档(ARM ARM文档)的介绍如下所示 翻译一下MPIDR_EL1相关的英文,如下所示: 作用: 在多处理器系统中,为调…

Xshell 连接虚拟机(Ubuntu、CentOS)

对于一些linux的初学者来说&#xff0c;在没有自己的服务器时可以选择使用虚拟机来代替&#xff08;如ubuntu、centos等&#xff09;进行相关的学习。下面介绍下如何使用xshell来远程连接虚拟机。 注意&#xff1a;下面我以Ubuntu来举例说明。 1、创建虚拟机 虚拟机的创建网络…

1、数据库安装修改root密码管理自启服务

MySQL的下载和安装 登录MySQL官网下载MySQL.zip包 MySQL :: Download MySQL Community Server 下载完毕可自行选择存储位置&#xff0c;进行解压 解压后配置环境变量 完成配置后在MySQL目录下新建一个my.ini配置文件 文件写入以下内容 [client] # 设置mysql客户端默认字符集…

面向对象2(static修饰变量和方法、Javabean类、测试类和工具类、对main方法的理解、继承、子类继承父类构造方法变量和方法)

1、static修饰变量和方法 JDK8以前&#xff0c;静态区在方法区里面&#xff0c;JDK8开始&#xff0c;静态区挪到了堆内存当中 理解&#xff1a; 因为静态方法没有this&#xff0c;而非静态方法是有一个隐含的参数this的&#xff0c;所以想在静态方法里面调用非静态变量或方法就…

电子招标采购系统源码之传统采购模式面临的挑战

采购类型多 采购制度&#xff1a;采购金额、部门、品类的差异导致管理标准不同。 采购流程&#xff1a;从供应商管理、寻源操作到合同签订、订单执行&#xff0c;业务流程长&#xff0c;审批节点多&#xff0c;传统管理透明度低&#xff0c;联动性差。 供应商管理难 寻源&#…

亚马逊云科技 Build On - Serverless助力企业降本增效

亚马逊云科技 Build On - Serverless开启零售新篇章梅开三度活动体验实验问题总结一点建议咖啡案例实验Serverless学习总结梅开三度 Hi,作为一名Builder&#xff0c;这也是第三次参加由AWS&CSDN共同举办的Build On活动&#xff0c;跟前几期一样&#xff0c;活动举办方也是…

Java集合ArrayList-学习笔记

目录 ArrayList 集合和数组的优势对比&#xff1a; 1.1 ArrayList类概述 1.2 ArrayList类常用方法 1.3 ArrayList存储字符串并遍历 1.4 ArrayList存储学生对象并遍历 1.5 查找用户的索引 1.6 判断用户的是否存在 ArrayList 集合和数组的优势对比&#xff1a; 集合长度可…

Ardupilot EKF3核心算法《状态量速度与位置预测方程》

目录 文章目录 目录摘要1. Ardupilot EKF3核心算法《状态量速度预测方程》2. Ardupilot EKF3核心算法《状态量位置预测方程》3. Ardupilot EKF3核心算法《状态量速度与位置预测方程》摘要 本节主要记录Ardupilot EKF3核心算法《状态量速度与位置预测方程》的过程,欢迎批评指正…

mysql生产数据库被误删

23年的头一天上班安装数据库&#xff0c;因为ssh工具来回切换失误&#xff0c;犯下不可饶恕的错误&#xff0c;居然将生产数据库全部删除&#xff0c;工作十几年头一次干这种蠢事&#xff0c;第一时间反应是一世英名毁于一旦&#xff0c;赶紧跑路。第二反应还是想办法看能否挽回…

aws eks 使用 cloudformation 创建并更新自管节点组

参考资料 更新现有自行管理的节点组 使用eks自管节点组能够最大程度控制节点的各项配置和参数&#xff0c;包括并不限于ami&#xff0c;节点类型等 但是使用自管节点也给用户带来了较大的维护和更新成本。对于节点组的更新操作&#xff0c;我们可以使用cloudformation的方式…

速览Visual Studio 2022 中的新增功能

目录 性能改进 Visual Studio 2022 为 64 位 在文件中更快地查找 Git 工具速度更快 生成新式应用 适用于 C、.NET 和热重载的更佳开发工具 Blazor & 的汇报ASP.NET 的 Razor 编辑器 热重载 创新触手可及 Git 多存储库支持和行暂存支持 IntelliCode 改进 为每个…

魔方(15)二、三、四、五阶棋盘魔方

棋盘魔方 这价格实在可恶&#xff0c;于是我拿现成的魔方自己贴贴纸。 二阶棋盘魔方A 有4个角块是3面黑&#xff0c;4个角块是3面白&#xff0c;而6个面都是棋盘色。 只需要2步就可以转化成&#xff1a; 所以任意状态只要转化成这个状态再加2步就能复原了。 二阶棋盘魔方B&a…

【C++函数对象】STL基础语法学习 | 仿函数谓词内建仿函数

目录 ●仿函数 1.概念 2.使用 ●谓词 1.一元谓词 2.二元谓词 ●内建仿函数 1.算数仿函数 2.关系仿函数 3.逻辑仿函数 ●仿函数 1.概念 重载函数调用操作符的类&#xff0c;其对象常称为函数对象。函数对象使用重载的()时&#xff0c;行为类似函数的调用&#xff0c;所…

技术更高,设计更远:华为全屋智能设计大赛的审美之跃

“人生到处知何以&#xff1f;应似飞鸿踏雪泥。泥上偶然留指爪&#xff0c;鸿飞那复计东西。”很多设计师朋友跟我说&#xff0c;苏轼这首《和子由渑池怀旧》是对设计与审美的最高理解。好的设计&#xff0c;应该仅仅留下一点点痕迹&#xff0c;同时在简约的表象下隐含大量的审…

高通平台开发系列讲解(USB篇)USB调试手段汇总说明 - 视频课

文章目录 一、USB AT数据流说明二、BUS Hound 工具说明三、sysfs相关USB调试节点四、USB usbmon工具使用五、USB usbmon日志解析六、UsbTreeView软件的使用七、视频讲解分享沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 碰见USB AT不通怎么办?所以本篇章汇总了高通…

Vue与React中父子组件生命周期的执行顺序?【生命周期详细知识讲解!!!】

文章目录一、 Vue中父子组件生命周期1-1 加载渲染过程1-2 销毁过程1-3 展示案例二、 React中父子组件生命周期2-1 关于React新旧版生命周期介绍2-2 父子组件生命周期2-2-1 父子组件初始化2-2-2 子组件修改自身state2-2-3 父组件修改props2-2-4 卸载子组件一、 Vue中父子组件生命…

卷绕剩余长度计算FC(收放卷应用)

卷径实时计算方法详细内容请参看下面的文章链接: 卷径计算详解(通过卷绕的膜长和膜厚进行计算)_RXXW_Dor的博客-CSDN博客有关卷绕+张力控制可以参看专栏的系列文章,文章链接如下:变频器简单张力控制(线缆收放卷应用)_RXXW_Dor的博客-CSDN博客_收放卷应用张力控制的开闭环…

【EHub_tx1_tx2_E100】Ubuntu18.04 + ROS_ Melodic + LingAo IMU 测试及RVIZ展示

简介&#xff1a;介绍LingAo 的6自由度IMU模块 在EHub_tx1_tx2_E100载板&#xff0c;TX1核心模块环境&#xff08;Ubuntu18.04&#xff09;下测试ROS驱动&#xff0c;打开使用RVIZ 查看IMU数据&#xff0c;本文的前提条件是你的TX1里已经安装了ROS版本&#xff1a;Melodic。 关…

Spring Boot+Mybatis+layui框架实现的前后端分离的医院药品管理系统源码+数据库

springboot layui药品管理系统 介绍 前后端分离的药品管理系统。 完整代码下载地址&#xff1a;Spring BootMybatislayui框架实现的前后端分离的医院药品管理系统源码数据库 软件架构 前端&#xff1a;layui框架 后端&#xff1a;Spring BootMybatis 数据库&#xff1a;…