每日算法-鏈表(23.合并k個升序鏈表、25.k個一組翻轉鏈表)

一.合并k個升序鏈表

1.1題目描述

1.2題解思路

解法一:小根堆

我們可以先定義一個小根堆,將k個指針的頭結點如堆,每次取堆頂元素尾插到newhead中,然后再pop(),接著push堆頂原來堆頂元素的下一個節點

重點分析:

1.定義小根堆的時候需要傳入仿函數。

2.每次入堆之前需要判斷指針是否為空

3.循環結束條件為堆空

解法二:遞歸

用遞歸的思想,將k個鏈表分成兩份,先分別合并這兩份鏈表,再合并這兩個有序的鏈表

1.3題解代碼

解法一代碼:

class Solution {
public:class cmp{public:bool operator()(ListNode * l1,ListNode *l2){return l1->val > l2->val;} };ListNode* mergeKLists(vector<ListNode*>& lists) {//定義小根堆priority_queue<ListNode *,vector<ListNode *>,cmp> heap;ListNode* newhead = new ListNode(-1);ListNode* cur = newhead;//讓所有的頭結點進入小根堆for(int i = 0;i < lists.size();i++){if(lists[i])heap.push(lists[i]);}//合并k個有序鏈表while(!heap.empty()){ListNode* tmp = heap.top();cur->next = tmp;cur = cur->next;tmp = tmp->next;heap.pop();if(tmp)heap.push(tmp);}return newhead->next;}
};

解法二代碼:

class Solution {
public://將[left,right)區間的鏈表排序,并且返回頭結點ListNode* _mergeKLists(vector<ListNode*>& lists,int left,int right){if(left > right) return nullptr;if(left == right) return lists[left];ListNode* newhead = new ListNode(-1);ListNode* cur = newhead;//[left,tmp][tmp+1,right]int tmp = (left+right)/2;ListNode* l1 = _mergeKLists(lists,left,tmp);ListNode* l2 = _mergeKLists(lists,tmp+1,right);//合并兩個有序鏈表while(l1 && l2){if(l1->val < l2->val){cur->next = l1;l1 = l1->next;cur = cur->next;}else{cur->next = l2;l2 = l2->next;cur = cur->next;}}if(l1) cur->next = l1;if(l2) cur->next = l2;ListNode* ret = newhead->next;delete newhead;return ret;}ListNode* mergeKLists(vector<ListNode*>& lists) {return _mergeKLists(lists,0,lists.size() - 1);}
};

二.k個一組翻轉鏈表

2.1題目描述

2.2題解思路

1.先求出需要翻轉多少組 n

2.以k個為一組,翻轉n次

2.3題解代碼

class Solution {
public:ListNode* reverseKGroup(ListNode* head, int k) {ListNode* newhead = new ListNode(-1);//1.求出需要翻轉多少次ListNode* cur = head;int size = 0;while(cur){cur = cur->next;size++;}int n  =size/k;//重復n次,以k個為一組翻轉鏈表cur = head;ListNode* prev = newhead;ListNode* next = cur->next;while(n--){ListNode* tmp = cur;//翻轉鏈表for(int i = 0; i <k; i++){cur->next = prev->next;prev->next = cur;cur = next;if(next) next = next->next;}prev = tmp;}//把不需要翻轉的接上prev->next = cur;return newhead->next;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77140.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77140.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77140.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java性能剖析工具箱

1. 基礎知識 1.1 Java性能調優概述 1.1.1 性能調優的重要性 性能調優是提升系統效率、降低成本和增強用戶體驗的關鍵步驟。通過優化,可以減少響應時間、降低資源消耗并提高系統的穩定性和可擴展性。 1.1.2 性能問題的常見表現 高CPU使用率:可能由熱點方法或線程阻塞引起。…

如何使用SpringApplicationRunListener在Spring Boot 應用的不同生命周期階段插入自定義邏輯

目錄 一、引言二、核心方法概述三、加載機制四、使用場景五、擴展 - 如何在測試的不同階段插入邏輯5.1 TestExecutionListener & AbstractTestExecutionListener5.1.1 主要功能5.1.2 生命周期方法 5.2 如何集成TestExecutionListener5.3 總結 一、引言 SpringApplicationR…

【NLP】 19. Tokenlisation 分詞 BPE, WordPiece, Unigram/SentencePiece

1. 翻譯系統性能評價方法 在機器翻譯系統性能評估中&#xff0c;通常既有人工評價也有自動評價方法&#xff1a; 1.1 人工評價 人工評價主要關注以下幾點&#xff1a; 流利度&#xff08;Fluency&#xff09;&#xff1a; 判斷翻譯結果是否符合目標語言的語法和習慣。充分性…

openai發布今天發布了o3和o4-mini。

ChatGPT Plus、Pro和Team用戶已經可以使用o3、o4-mini和o4-mini-high&#xff0c;取代o1、o3-mini和o3-mini-high。具體特點&#xff1a; ChatGPT-o3 特點&#xff1a;o3模型使用高級推理技術&#xff0c;這意味著它在處理復雜問題和邏輯推理方面表現出色。但是不能聯網搜索 …

ESP-ADF外設子系統深度解析:esp_peripherals組件架構與核心設計(輸入類外設之觸摸屏 Touch)

目錄 ESP-ADF外設子系統深度解析&#xff1a;esp_peripherals組件架構與核心設計&#xff08;輸入類外設之觸摸屏 Touch&#xff09;簡介模塊概述功能定義架構位置核心特性 觸摸(Touch)外設觸摸外設概述觸摸外設API和數據結構外設層API&#xff08;periph_touch.h/periph_touch…

python 讀取分級目錄

import osdef read_files_in_directory(root_dir):# 遍歷根目錄下的所有文件和目錄for year_dir in os.listdir(root_dir):year_path os.path.join(root_dir, year_dir)if os.path.isdir(year_path): # 確保是目錄for month_dir in os.listdir(year_path):# if month_dir in …

MongoServerError: Authentication failed.處理辦法

1停止MongoDB服務&#xff1a; systemctl stop mongod2臨時修改MongoDB配置&#xff0c;禁用認證&#xff1a; vim /etc/mongdb.config 在配置文件中找到 security:authorization: disabled # 臨時關閉認證3.重啟MongoDB服務 # 重啟MongoDB服務 sudo systemctl restart mon…

ObjectInputStream 終極解析與記憶指南

ObjectInputStream 終極解析與記憶指南 一、核心本質 ObjectInputStream 是 Java 提供的對象反序列化流,繼承自 InputStream,用于讀取由ObjectOutputStream序列化的Java對象。 核心特性速查表 特性說明繼承鏈InputStream → ObjectInputStream核心功能實現Java對象反序列化…

Java面試高頻問題(1-5)

一、HashMap實現原理與并發問題 核心機制 1. 哈希沖突解決方案&#xff1a;采用數組鏈表紅黑樹結構&#xff08;JDK1.8&#xff09;&#xff0c;當鏈表長度超過閾值&#xff08;默認8&#xff09;時轉為紅黑樹&#xff0c;提升查詢效率 2. 擴容機制&#xff1a;當元素數量超過…

Genspark:重新定義AI搜索與代理的全能型工具

在當今快速發展的AI技術領域&#xff0c;搜索工具正在經歷前所未有的變革。Genspark&#xff0c;這家由前百度高管景鯤和朱凱華創立的AI公司&#xff0c;為我們帶來了全新的AI代理引擎體驗。作為一位專注于AI工具分享的博主&#xff0c;今天我將為大家詳細介紹這款強大的工具&a…

工作記錄3

前言: 繼續刷尚硅谷的前端視頻,查漏補缺。 JS (1)apply() 方法與 call() 方法 (2)構造函數 (3)原型對象<

photo-sphere-viewer 4.8.1在vue中使用

photo-sphere-viewer 加載單張平面圖 import { Viewer } from photo-sphere-viewerthis.viewer new Viewer({panorama: ‘完整的url,也可以是一個base64’,// Containercontainer: document.getElementById(viewer1),navbar: true,// Resize the panoramasize: {width: 100%,…

【PyTorch】PyTorch中的非線性激活函數詳解:原理、優缺點與實戰指南

目錄 PyTorch中的非線性激活函數詳解&#xff1a;原理、優缺點與實戰指南一、核心激活函數作用、分類與數學表達1. 傳統飽和型激活函數2. ReLU族&#xff08;加權和類核心&#xff09;3. 自適應改進型激活函數4. 輕量化與硬件友好型 二、優缺點對比與適用場景三、選擇策略與PyT…

中間件--ClickHouse-7--冷熱數據分離,解決Mysql海量數據瓶頸

在web應用中&#xff0c;當數據量非常大時&#xff0c;即使MySQL的存儲能夠滿足&#xff0c;但性能一般也會比較差。此時&#xff0c;可以考慮使用ClickHouse存儲歷史數據&#xff0c;在Mysql存儲最近熱點數據的方式&#xff0c;來優化和提升查詢性能。ClickHouse的設計初衷就是…

阿里一面:Nacos配置中心交互模型是 push 還是 pull ?(原理+源碼分析)

對于Nacos大家應該都不太陌生&#xff0c;出身阿里名聲在外&#xff0c;能做動態服務發現、配置管理&#xff0c;非常好用的一個工具。然而這樣的技術用的人越多面試被問的概率也就越大&#xff0c;如果只停留在使用層面&#xff0c;那面試可能要吃大虧。 比如我們今天要討論的…

DAY09:【pytorch】nn網絡層

1、卷積層 1.1 Convolution 1.1.1 卷積操作 卷積運算&#xff1a;卷積核在輸入信號&#xff08;圖像&#xff09;上滑動&#xff0c;相應位置上進行乘加卷積核&#xff1a;又稱為濾波器、過濾器&#xff0c;可認為是某種模式、某種特征 1.1.2 卷積維度 一般情況下&#xf…

Pinpoint - 大型分布式系統的 APM(應用性能管理)工具

文章目錄 一、關于 Pinpoint最新版本&#xff08;2024/10/23&#xff09;-- v3.0.1PHP, PYTHON 二、概述支持的模塊 一、關于 Pinpoint Pinpoint 是一個用于大型分布式系統的 APM&#xff08;應用性能管理&#xff09;工具&#xff0c;由 Java / PHP/PYTHON 編寫。 受 Dapper …

設計模式實踐:模板方法、觀察者與策略模式詳解

目錄 1 模板方法1.1 模板方法基本概念1.2 實驗1.2.1 未使用模板方法實現代碼1.2.2 使用模板方法的代碼 2 觀察者模式2.1 觀察者模式基本概念2.2 實驗 3 策略模式3.1 策略模式基本概念3.2 實驗 1 模板方法 1.1 模板方法基本概念 定義&#xff1a;一個操作中的算法的骨架 &…

Vue 2.0和3.0筆記

Vue 3 關于組件 今天回顧了下2.0關于組件的內容&#xff0c;3.0定義組件的方式多了一種就是通過單文件組件&#xff08;Single-File Component&#xff09;的方式將Vue的模板&#xff0c;邏輯和樣式放到一個文件中&#xff0c;2.0則不同&#xff0c;它是將模板放到一個屬性中…

前端面試-微前端

1. 什么是微前端&#xff1f;它的核心價值是什么&#xff1f; 答案&#xff1a; 微前端是一種將前端應用拆分為獨立模塊的架構模式&#xff0c;每個模塊可由不同團隊獨立開發、測試、部署和運行。其核心價值包括&#xff1a; 技術棧無關性&#xff1a;支持 React、Vue、Angul…