LeetCode热题100JS(79/100)第十五天|347|295|121|55|45

 347. 前 K 个高频元素

题目链接:347. 前 K 个高频元素

难度:中等

刷题状态:1刷

新知识:

解题过程

思考

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

没思路,看答案

题解分析

参考题解链接:240. 搜索二维矩阵 II(贪心,清晰图解)

详细分析如下,时间复杂度:O(nlogn)

/*** @param {number[]} nums* @param {number} k* @return {number[]}*/
var topKFrequent = function(nums, k) {//使用map统计每个元素出现的次数let map=new Map()for(let num of nums){if(!map.has(num)) map.set(num,0)map.set(num,map.get(num)+1)}//map变成arry再排序let res=[]let sort=Array.from(map).sort((a,b)=>b[1]-a[1]).forEach(([key,val])=>{if(!k) returnk--res.push(key)})return res
};

手搓答案(无非废话版)

/** * @param {number[]} nums* @param {number} k* @return {number[]}*/var topKFrequent=function(nums,k){let res=[],map=new Map()for(let n of nums){if(!map.has(n)) map.set(n,0)map.set(n,map.get(n)+1)}Array.from(map).sort((a,b)=>b[1]-a[1]).forEach(([key,val])=>{if(!k) return k--res.push(key)})return res}

总结

 拿下,如果要用最小栈的方法,那就很复杂了,,我看不懂

 295. 数据流的中位数

题目链接:​​​​​​​​​​​​​​295. 数据流的中位数

难度:困难

刷题状态:1刷

新知识:

- 优先队列(MaxPriorityQueue 和 MinPriorityQueue)

- this.right.enqueue(num); // 将新元素加入大顶堆

- this.right.dequeue() //弹出堆顶元素

- this.right.front() //front 方法返回堆顶元素而不移除它

- this.left.size()和length一样

解题过程

思考
输入
["MedianFinder", "addNum", "addNum", "findMedian", "addNum", "findMedian"]
[[], [1], [2], [], [3], []]
输出
[null, null, null, 1.5, null, 2.0]

定义类的题目,不会,看答案

题解分析

参考题解链接:​​​​​​​如何自然引入大小堆?简洁写法!(Python/Java/C++/Go/JS/Rust)

详细分析如下

var MedianFinder = function() {//优先队列(MaxPriorityQueue 和 MinPriorityQueue)this.left = new MaxPriorityQueue();  // 小顶堆,用于存储较小的一半this.right = new MinPriorityQueue(); // 大顶堆,用于存储较大的一半
};MedianFinder.prototype.addNum = function(num) {if (this.left.size() === this.right.size()) {this.right.enqueue(num); // 将新元素加入大顶堆this.left.enqueue(this.right.dequeue()); // 将小顶堆的堆顶元素(即 right 中的最小元素)移到大顶堆,以保持 left 中的元素始终不大于 right 中的元素。} else {this.left.enqueue(num);// 将新元素加入小顶堆this.right.enqueue(this.left.dequeue()); // 将大顶堆的堆顶元素(即 left 中的最大元素)移到小顶堆,以保持 right 中的元素始终不小于 left 中的元素。}
};MedianFinder.prototype.findMedian = function() {//front 方法返回堆顶元素而不移除它if (this.left.size() > this.right.size()) {return this.left.front();}return (this.left.front() + this.right.front()) / 2;
};

手搓答案(无非废话版)

var MedianFinder=function(){this.left=new MaxPriorityQueue()this.right=new MinPriorityQueue()
}MedianFinder.prototype.addNum=function(num){if(this.left.size()==this.right.size()){this.right.enqueue(num)this.left.enqueue(this.right.dequeue())}else{this.left.enqueue(num)this.right.enqueue(this.left.dequeue())}
}MedianFinder.prototype.findMedian=function(){if(this.left.size()>this.right.size()){return this.left.front()}else{return (this.left.front()+this.right.front())/2.0}
}

总结

 新知识优先队列,元素的出队顺序不是按照它们进入队列的顺序,而是根据它们的优先级。

 ​​​​​​​121. 买卖股票的最佳时机

题目链接:​​​​​​​​​​​​​​121. 买卖股票的最佳时机

难度:简单

刷题状态:1刷

新知识:

解题过程

思考

示例 1:

输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

贪心算法类型题目

题解分析

参考题解链接:​​​​​​​买卖股票的最佳时机

详细分析如下,

/*** @param {number[]} prices* @return {number}*/
var maxProfit = function(prices) {let minprice=Infinity,maxprofit=0for(let p of prices){//比较利润最大值maxprofit=Math.max(p-minprice,maxprofit)//更新最小价格minprice=Math.min(minprice,p)}return maxprofit
};

手搓答案(无非废话版)

/*** @param {number[]} prices* @return {number}*/var maxProfit=function(prices){let minp=Infinity,res=0for(let p of prices){res=Math.max(p-minp,res)minp=Math.min(minp,p)}return res}

总结

 拿下,基础贪心算法题

 ​​​​​​​55. 跳跃游戏

题目链接:​​​​​​​​​​​​​​​​​​​​​55. 跳跃游戏

难度:中等

刷题状态:1刷

新知识:

解题过程

思考

示例 1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
题解分析

参考题解链接:​​​​​​​​​​​​​​【跳跃游戏】别想那么多,就挨着跳吧

详细分析如下,

/*** @param {number[]} nums* @return {boolean}*/
var canJump = function(nums) {//step表示当前位置能到的最远下标let step=0for(let i=0;i<nums.length;i++){if(step>=nums.length-1) return true//提前结束if(i>step) return false//全部循环完了还是走不到step=Math.max(step,i+nums[i])}
};

手搓答案(无非废话版)

/*** @param {number[]} nums* @return {boolean}*/var canJump=function(nums){let step=0,n=nums.lengthfor(let i=0;i<n;i++){if(step>=n-1) return trueif(step<i) return falsestep=Math.max(step,i+nums[i])}}

总结

 拿下

 ​​​​​​​45. 跳跃游戏 II

题目链接:​​​​​​​​​​​​​​​​​​​​​45. 跳跃游戏 II

难度:中等

刷题状态:1刷

新知识:

解题过程

思考

示例 1:

输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
题解分析

参考题解链接:​​​​​​​​​​​​​​【跳跃游戏 II】别想那么多,就挨着跳吧 II

详细分析如下,

/*** @param {number[]} nums* @return {number}*/
var jump = function(nums) {//end是跳跃边界let res=0,end=0,step=0for(let i=0;i<nums.length-1;i++){step=Math.max(step,i+nums[i])if(i==end){//说明已经到边界了,更新边界为当前能到达的最远距离end=step//走了一步res++}}return res
};

手搓答案(无非废话版)

/*** @param {number[]} nums* @return {number}*/var jump=function(nums){let res=0,end=0,step=0,n=nums.lengthfor(let i=0;i<n-1;i++){step=Math.max(step,i+nums[i])if(i==end){end=stepres++}}return res}

总结

重点理解end的作用,end相当于在每一段(一步)中找最大值

循环条件 i < nums.length - 1 的使用是为了避免在最后一个元素时进行不必要的跳跃检查。

不需要在最后一个元素跳跃

  • 目标是到达数组的最后一个位置,而不是超过它。

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

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

相关文章

Sentinel 限流利器(功能以及源码解析)

Sentinel简介 Sentinel是阿里开源的一款面向分布式、多语言异构化服务架构的流量治理组件。 主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 核心概念 资源 资源是…

子数组 之 logTrick算法,求解或,与,LCM,GCD

文章目录 gcd的问题最大公约数 求解子数组的&,|,lcm,gcd的最值or计数问题&#xff0c;如果采用暴力的做法&#xff0c;那么时间复杂度会来到o(n^2),其实在求解的过程中&#xff0c;会出现很多的结果不变的情况&#xff0c;所以我们就可以提前结束 存在一定的单调性&#x…

How to use pgbench to test performance for PostgreSQL?

pgbench 是一个用于测试 PostgreSQL 数据库性能的基准测试工具。通过模拟多个客户端并发执行 SQL 查询&#xff0c;它可以帮助你评估数据库的性能。以下是使用 pgbench 的基本步骤&#xff1a; 安装 pgbench pgbench 是 PostgreSQL 的一部分&#xff0c;因此在安装 PostgreSQ…

应用服务接口第二次请求一直pending问题

目录 一、问题背景二、问题排查过程三、解决方案四、总结 一、问题背景 升级内容发布到灰度环境&#xff0c;验证相关服务&#xff0c;查看接口调用日志&#xff0c;发现第一次请求正常&#xff0c;第二次相同接口请求就一直pending&#xff0c;其他服务也是如此 二、问题排查…

嵌入式八股RTOS与Linux---网络系统篇

前言 关于计网的什么TCP三次握手 几层模型啊TCP报文啥的不在这里讲,会单独分成一个计算机网络模块   这里主要介绍介绍lwip和socket FreeRTOS下的网络接口–移植LWIP 实际上FreeRTOS并不自带网络接口,我们一般会通过移植lwip协议栈让FreeRTOS可以通过网络接口收发数据,具体可…

推荐一款好看的 vue3 后台模板

SoybeanAdmin 项目简介 SoybeanAdmin 是一个基于最新前端技术栈的清新、优雅、高颜值且功能强大的后台管理模板。它采用 Vue3, Vite5, TypeScript, Pinia, NaiveUI 和 UnoCSS 构建&#xff0c;为开发者提供了一个现代化、高效且易于扩展的后台管理系统解决方案。 主要特点&am…

【django】1-1 django构建web程序的基础知识

文章目录 1 构建web应用的基础知识1.1 互联网相关的概念1.2 互联网协议DNS(域名系统)IP协议(互联网络协议)TCP(传输控制协议)HTTP(超文本传输协议)SSL(安全套接字层)TLS(传输层安全) 1.3 URL 2 web程序2.1 web程序的本质2.2 web框架的设计模式1.2.1 经典的MVC设计模式1.2.2 Dja…

【智能体】从一个聊天工作流了解LangGraph

1. 前言 这篇文章将从如何搭建一个带网络搜索功能的聊天机器人工作流&#xff0c;带你初步了解 LangGraph。 2. 前提条件 已搭建 Python 开发环境&#xff0c;使用 3.11 以上版本。 已熟悉 Python 基础语法。可参考&#xff1a;【LLM】Python 基础语法_llm python入门-CSDN博…

JAVA开发:实例成员与静态成员

判断Java中的实例成员与静态成员 在Java中&#xff0c;可以通过以下几种方式判断一个成员是实例成员还是静态成员&#xff1a; 1. 通过声明方式判断 静态成员使用static关键字修饰&#xff0c;实例成员不使用&#xff1a; public class MyClass {// 实例成员int instanceVa…

Softmax 回归 + 损失函数 + 图片分类数据集

Softmax 回归 softmax 回归是机器学习另外一个非常经典且重要的模型&#xff0c;是一个分类问题。 下面先解释一下分类和回归的区别&#xff1a; 简单来说&#xff0c;分类问题从回归的单输出变成了多输出&#xff0c;输出的个数等于类别的个数。 实际上&#xff0c;对于分…

MySQL-存储过程

介绍 基本语法 创建 调用 查看 删除 变量 系统变量 查看 设置 用户定义变量 赋值 使用 局部变量 声明 赋值 流程控制 参数 条件结构 IF case 循环结构 while repeat loop 游标 条件处理程序 介绍 举个简单的例子&#xff0c;我们先select某数据&…

使用 Go 和 Gin 实现高可用负载均衡代理服务器

前言 在现代分布式系统中,负载均衡是保障服务高可用性和性能的核心技术。本文将基于 Go 语言和 Gin 框架实现一个支持动态路由、健康检查、会话保持等特性的企业级负载均衡代理服务器,并提供完整的压力测试方案和优化建议。 通过本方案实现的负载均衡代理具备以下优势: 单…

在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 MineCraft 服务器,并实现远程联机,详细教程

Linux 部署 MineCraft 服务器 详细教程&#xff08;丐版&#xff0c;无需云服务器&#xff09; 一、虚拟机 Ubuntu 部署二、下载 Minecraft 服务端三、安装 JRE 21四、安装 MCS manager 面板五、搭建服务器六、本地测试连接七、下载樱花&#xff0c;实现内网穿透&#xff0c;邀…

批量取消 PDF 文档中的所有超链接

在 PDF 文档中我们可以插入各种各样的文本也可以给文本设置字体&#xff0c;颜色等多种样式&#xff0c;同时还可以给文字或者图片添加上超链接&#xff0c;当我们点击超链接之后&#xff0c;就会跳转到对应的网页。有时候这会对我们的阅读或者使用形成一定的干扰&#xff0c;今…

Ubuntu xinference部署本地模型bge-large-zh-v1.5、bge-reranker-v2-m3

bge-large-zh-v1.5 下载模型到指定路径&#xff1a; modelscope download --model BAAI/bge-large-zh-v1.5 --local_dir ./bge-large-zh-v1.5自定义 embedding 模型&#xff0c;custom-bge-large-zh-v1.5.json&#xff1a; {"model_name": "custom-bge-large…

Vue的实例

Every Vue application starts with a single Vue component instance as the application root. Any other Vue component created in the same application needs to be nested inside this root component. 每个 Vue 应用都以一个 Vue 组件实例作为应用的根开始。在同一个应…

Linux学习笔记(应用篇三)

基于I.MX6ULL-MINI开发板 LED学习GPIO应用编程输入设备 开发板中所有的设备&#xff08;对象&#xff09;都会在/sys/devices 体现出来&#xff0c;是 sysfs 文件系统中最重要的目录结构 /sys下的子目录说明/sys/devices这是系统中所有设备存放的目录&#xff0c;也就是系统中…

【图论】网络流算法入门

&#xff08;决定狠狠加训图论了&#xff0c;从一直想学但没启动的网络流算法开始。&#xff09; 网络流问题 • 问题定义&#xff1a;在带权有向图 G ( V , E ) G(V, E) G(V,E) 中&#xff0c;每条边 e ( u , v ) e(u, v) e(u,v) 有容量 c ( u , v ) c(u, v) c(u,v)&am…

递归、搜索与回溯第四讲:floodfill算法

递归、搜索与回溯第四讲&#xff1a;floodfill算法 1.Floodfill算法介绍2.图像渲染3.岛屿数量4.岛屿的最大面积5.被围绕的区域6.太平洋大西洋水流问题7.扫雷游戏8.衣橱整理 1.Floodfill算法介绍 2.图像渲染 3.岛屿数量 4.岛屿的最大面积 5.被围绕的区域 6.太平洋大西洋水流问题…

【深度学习与实战】2.3、线性回归模型与梯度下降法先导案例--最小二乘法(向量形式求解)

为了求解损失函数 对 的导数&#xff0c;并利用最小二乘法向量形式求解 的值‌ 这是‌线性回归‌的平方误差损失函数&#xff0c;目标是最小化预测值 与真实值 之间的差距。 ‌损失函数‌&#xff1a; 考虑多个样本的情况&#xff0c;损失函数为所有样本的平方误差之和&a…