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.pswp.cn/web/73526.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73526.shtml
英文地址,請注明出處:http://en.pswp.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…