【PTA】數據結構與算法0001:1025 反轉鏈表

文章大綱

      • 寫在前面
      • 測試用例
      • ac代碼
      • 學習代碼
      • 知識點小結

寫在前面

  • 實現思路
    • 結構體封裝數據
      • 根據order重新排序
      • k區間值迭代翻轉
        • n整除k,則最后地址輸出"-1"
        • 非整除,最后剩余區間,原序輸出。最后地址輸出"-1"
  • 題目有難度,區間邊界值、實現方案費時間

在這里插入圖片描述

測試用例

input:
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
output:
00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1

ac代碼

#include <iostream>
#include <algorithm>
using namespace std;const int maxn = 100010;
struct Node // 定義靜態鏈表
{int address, data, next;int order;Node(){order = maxn;}
} node[maxn];
bool cmp(Node a, Node b)
{return a.order < b.order;
}
int main()
{int bgin, n, k, address;scanf("%d%d%d", &bgin, &n, &k);  // 存儲地址、節點個數、步長(步驟1)for(int i=0; i<n; i++){scanf("%d", &address);scanf("%d%d", &node[address].data, &node[address].next);node[address].address = address;}int p = bgin, cnt = 0;while(p !=-1 )  // cnt 有效節點個數(步驟2){node[p].order = cnt++;p = node[p].next;}sort(node, node+maxn, cmp);n = cnt;for(int i=0; i<n/k; i++)  // 枚舉完整的n/k塊{// 第i塊倒序輸出(步驟3)for(int j=(i+1)*k-1; j>i*k; j--)printf("%05d %d %05d\n", node[j].address, node[j].data, node[j-1].address);// 每塊最后一個節點地址處理printf("%05d %d ", node[i*k].address, node[i*k].data);// 非最后一塊,指向下一塊的最后一個節點(步驟4)if(i<n/k-1) printf("%05d\n", node[(i+2)*k-1].address);else  // 最后一塊{if(n%k==0) printf("-1\n");  // 最后一個節點,輸出-1;否則,打印剩余不完整的塊相應節點(步驟5)else{printf("%05d\n", node[(i+1)*k].address);for(int i=n/k*k; i<n; i++){printf("%05d %d ", node[i].address, node[i].data);if(i<n-1) printf("%05d\n", node[i+1].address);else printf("-1\n");}}}}return 0;
}

學習代碼

  • 1025. 反轉鏈表 (25).cpp···墻裂推薦···
  • 實現思路
    • 3個整型數組,有效節點地址順序lists、節點數據data、下一節點地址next
    • 翻轉地址,打印輸出數據、地址、下一地址即可
    • 根據翻轉后的地址循環打印結果數據
    • 打印最后節點
    • 思想很巧妙,值得學習!
#include <iostream>
#include <algorithm>
using namespace std;
int main() {int first, k, n, temp;cin >> first >> n >> k;int data[100005], next[100005], list[100005];for (int i = 0; i < n; i++) {cin >> temp;cin >> data[temp] >> next[temp];}int sum = 0;//不一定所有的輸入的結點都是有用的,加個計數器while (first != -1) {list[sum++] = first;first = next[first];}for (int i = 0; i < (sum - sum % k); i += k)reverse(begin(list) + i, begin(list) + i + k);for (int i = 0; i < sum - 1; i++)printf("%05d %d %05d\n", list[i], data[list[i]], list[i + 1]);printf("%05d %d -1", list[sum - 1], data[list[sum - 1]]);return 0;
}

知識點小結

// 區間翻轉函數
reverse(begin(list) + i, begin(list) + i + k);

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

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

相關文章

深入解析 .NET 泛型:從原理到實戰優化

在現代軟件開發中&#xff0c;代碼復用性和性能優化是開發者永恒的追求。.NET 泛型作為一項強大的語言特性&#xff0c;不僅能夠幫助我們消除重復代碼&#xff0c;還能顯著提升代碼的類型安全性和運行效率。本文將帶你全面了解 .NET 泛型&#xff0c;從基本概念到高級用法&…

Excel 處理軟件 內容復制工具:工作表批量復制 + 合并拆分簡潔操作零門檻

各位辦公小能手們&#xff01;今天給你們介紹一款超牛的軟件——Excel內容復制工具。軟件下載地址安裝包 這可是專門為了讓Excel數據處理效率蹭蹭往上漲而設計的輔助軟件呢&#xff01;它的主要功能可多啦&#xff0c;能批量復制工作表&#xff0c;還能把好多表格合并到同一個…

【機器學習實戰筆記 14】集成學習:XGBoost算法(一) 原理簡介與快速應用

《XGBoost算法》 推薦的學習路徑&#xff1a; 【快速實現XGBoost、跑通代碼】- 第一部分 【快速掌握XGBoost應用、達到自由調參水平】- 第一部分~第三部分 【快速掌握XGBoost原理、面試得以通關】- 第一部分1 第二部分1.2、2.2 第四部分 目錄《XGBoost算法》一 XGBoost的基…

.NET AI 模板

引言 隨著人工智能技術的快速發展&#xff0c;AI應用開發已成為開發者必備的技能之一。然而&#xff0c;對于許多.NET開發者來說&#xff0c;如何快速上手AI開發仍然是一個挑戰。微軟推出的.NET AI模板預覽版正是為了解決這一問題而生&#xff0c;為開發者提供了構建智能聊天應…

EFK9.0.3 windows搭建

背景 最近某個功能要使用到ELK&#xff08;ElasticSearch、Logstash、Kibana&#xff09;采集日志&#xff0c;對數據進行分析&#xff0c;網上百度了一下&#xff0c;目前推薦不使用Logstash而使用Filebeat ,即EFK。 下載鏈接 Elasticsearch Kibana Filebeat 安裝前提 …

上海新華醫院奉賢院區:以元宇宙技術重構未來醫療生態

引言&#xff1a;當醫療遇上元宇宙在數字化轉型的浪潮中&#xff0c;上海新華醫院奉賢院區以"智慧醫院"為定位&#xff0c;率先構建了"元宇宙醫院"雛形。通過AI大模型、三維影像分析、AR手術導航等前沿技術的深度融合&#xff0c;醫院正在打造一個覆蓋全周…

知識競賽答題pk小程序用戶操作手冊

知識競賽答題 PK 小程序用戶操作手冊 一、注冊與登錄 用戶首次使用答題pk小程序需上傳頭像&#xff0c;輸入昵稱&#xff0c;并選擇加入團隊。如果是企業內部人員使用可開啟白名單功能。二、進入答題 PK 模式 登錄后&#xff0c;在小程序首頁&#xff0c;您可以看到 “單人挑戰…

等大小譜聚類

聚類是一種將具有相似特征的數據點進行分組的方法。它廣泛應用于探索性數據分析&#xff0c;并已被證明在模式識別、市場和客戶細分、推薦系統、數據壓縮以及生物數據分析等許多應用中都發揮著重要作用。 盡管聚類算法種類繁多&#xff0c;但沒有一種能夠生成點數均衡的聚類。…

〔從零搭建〕數據湖平臺部署指南

&#x1f525;&#x1f525; AllData大數據產品是可定義數據中臺&#xff0c;以數據平臺為底座&#xff0c;以數據中臺為橋梁&#xff0c;以機器學習平臺為中層框架&#xff0c;以大模型應用為上游產品&#xff0c;提供全鏈路數字化解決方案。 ?杭州奧零數據科技官網&#xff…

Java 導出pdf 寫出demo 1、需要設置自定義頁眉和文字 2、可以插入表格 3、可以插入圖片

以下是一個使用 iText 7 庫實現 PDF 導出的 Java 示例&#xff0c;包含自定義頁眉、文字、表格和圖片功能&#xff1a; 添加 Maven 依賴 <dependencies><!-- iText 7 Core --><dependency><groupId>com.itextpdf</groupId><artifactId>ite…

Ntfs!LfsReadRestart函數分析得到Ntfs!LFS_RESTART_PAGE_HEADER

第一部分&#xff1a;0: kd> p Ntfs!LfsPinOrMapData0x8c: f71797f6 ff15a40016f7 call dword ptr [Ntfs!_imp__CcPinRead (f71600a4)] 0: kd> t nt!CcPinRead: 80bf9a5a 6a2c push 2Ch 0: kd> kc# 00 nt!CcPinRead 01 Ntfs!LfsPinOrMapData 02 N…

skywalking-agent-docker鏡像

FROM centos:7.9.2009 USER root# 定義 Arthas 目錄環境變量 ENV ARTHAS_HOME/opt/arthas# 更改 YUM 源并清理緩存 RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak && \rm -rf /etc/yum.repos.d/* && \curl -o /etc/yum.rep…

數據庫開發運維的集成:彌合開發與運維之間的鴻溝

在傳統的軟件開發工作流程中&#xff0c;數據庫變更往往是事后才考慮的問題。應用程序代碼遵循定義明確的開發運維實踐&#xff0c;包括版本控制、自動測試和持續部署&#xff0c;而數據庫變更則經常是由數據庫管理員手動執行的高風險操作。這種脫節造成了瓶頸&#xff0c;帶來…

PiscTrace應用:從 YOLO-Pose 到深蹲與引體向上計數:實時健身動作分析與實現

隨著健身行業的發展&#xff0c;越來越多的智能應用涌現&#xff0c;用于幫助健身者更好地記錄和分析運動情況。特別是在體能訓練中&#xff0c;俯臥撐和引體向上是兩個非常常見的動作&#xff0c;它們通常用來鍛煉上半身力量和耐力。為了使訓練更加科學和高效&#xff0c;實時…

【unity】webCanvas.enabled = false;和webCanvas.gameObject.SetActive(false);的優缺點比較

在 Unity 中&#xff0c;webCanvas.gameObject.SetActive(false) 和 webCanvas.enabled false 是兩種不同的隱藏 UI 的方式&#xff0c;它們的核心區別在于作用范圍和對組件狀態的影響。理解這些差異能幫助你避免初始化失敗、性能問題和邏輯錯誤。 1核心區別 gameObject.SetAc…

深入探索 pnpm:高效磁盤利用與靈活的包管理解決方案

引言 在現代 JavaScript 開發中&#xff0c;依賴管理效率直接影響開發體驗。傳統工具如 npm 和 yarn 在大型項目中常面臨磁盤冗余和性能瓶頸。pnpm&#xff08;Performant npm&#xff09;通過創新的硬鏈接和符號鏈接機制&#xff0c;解決了這些痛點。本文將深入解析 pnpm 的核…

Hive MetaStore的實現和優化

在大數據領域&#xff0c;數據管理與存儲至關重要&#xff0c;Hive MetaStore&#xff08;HMS&#xff09;作為 Hive 數據倉庫的核心組件&#xff0c;承擔著元數據管理的關鍵職責。隨著數據規模不斷膨脹&#xff0c;其性能與穩定性面臨挑戰。本文將深入剖析 HMS 的實現機制&…

一文讀懂動態規劃:多種經典問題和思路

一、動態規劃算法的思想與核心概念框架 1. 動態規劃的基本思想 動態規劃&#xff08;Dynamic Programming, DP&#xff09;是一種通過將復雜問題分解為重疊子問題&#xff0c;并利用子問題的解來高效解決原問題的方法。其核心思想是避免重復計算&#xff0c;通過存儲中間結果&a…

阿幸課堂隨機點名

代碼功能 這個是一個HTML網頁端&#xff0c;簡單來說就是可以雙擊之后運行進行點名。 當然&#xff0c;不局限于課堂點名 代碼功能 Excel 導入增強&#xff1a; 增加了列選擇器&#xff0c;可以指定從哪一列讀取學生姓名 增加了起始行選擇器&#xff0c;可以跳過標題行或其…

LeetCode 560: 和為K的子數組

題目描述給定一個整數數組 nums 和一個整數 k&#xff0c;請統計并返回該數組中和為 k 的連續子數組的個數。示例 1&#xff1a;輸入&#xff1a;nums [1,1,1], k 2 輸出&#xff1a;2示例 2&#xff1a;輸入&#xff1a;nums [1,2,3], k 3 輸出&#xff1a;2提示&#xff…