LeetCode刷题笔记 - JavaScript(三)
admin
2024-05-14 21:06:07
0

文章目录

    • 1.剑指 Offer 59 - I. 滑动窗口的最大值
    • 1.剑指 Offer 43. 1~n 整数中 1 出现的次数

剑指 Offer 59 - I. 滑动窗口的最大值
剑指 Offer 43. 1~n 整数中 1 出现的次数

1.剑指 Offer 59 - I. 滑动窗口的最大值

给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。

题目大意:求每个滑动窗口的最大值。

解题思路:考虑维护一个单调队列,在滑动窗口移动的同时维护这个单调队列,就可以了。

代码

	var maxSlidingWindow = function(nums, k) {const res = []; // 答案序列const dque = []; // 单调队列const n = nums.length;let l = 0, r = 0; // 滑动窗口的边界while(r < n) {// 维护滑动窗口的边界while(dque.length !== 0 && dque[dque.length - 1] < nums[r]) {dque.pop();}dque.push(nums[r++]);if(r>=k) {res.push(dque[0]);if(dque[0] === nums[l]) dque.shift();l++;}}return res;
};

1.剑指 Offer 43. 1~n 整数中 1 出现的次数

输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。
例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。

题目大意:求1~n中每个数字出现的1的数量的和。

解题思路:总结规律。规律一:n位数上总的1的个数为n*(10^(n-1)),如1位数1的总和为1,2位数的1的总和为20,3位数的总和为300; 规律二:求1~n之间的所有数上的1的数量总和就是求n上的每一个数位区间上的1的数量的总和。设f(n)是可以求出1-n之间所有1的数量的函数,假如n=234,那么1-n之间所有1的数量就等于:f(200)+f(30)+f(4);
结合以上两个规则,就可以求出1~n 整数中 1 出现的次数。

代码

	var countDigitOne = function(n) {let res = 0;let count = 1;for(let i = 0; n >= count ; i++) {res += Math.floor(n / (count * 10)) * count + Math.min(Math.max(n % (count * 10) - count + 1, 0),count);count *= 10;}return res;
};

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...