12.9_黑馬數據結構與算法筆記Java

目錄

057 多路遞歸 e03 楊輝三角2

thinking:二維數組的動態初始化?

057 多路遞歸 e03 楊輝三角3

058 鏈表 e01 反轉單向鏈表1

058 鏈表 e01 反轉單向鏈表2

058 鏈表 e01 反轉單向鏈表3 遞歸

058 鏈表 e01 反轉單向鏈表4

為什么是returnn1呢?也就是新頭,而不是一整個鏈表?

058 鏈表 e01 反轉單向鏈表5

058 鏈表 e02 根據值刪除節點1

058 鏈表 e02 根據值刪除節點2

058 鏈表 e03 刪除倒數節點1 遞歸

058 鏈表 e03 刪除倒數節點2

058 鏈表 e04 有序鏈表去重1

058 鏈表 e04 有序鏈表去重2 遞歸

058 鏈表 e05 有序鏈表去重1 遞歸

058 鏈表 e05 有序鏈表去重2

058 鏈表 e06 合并有序鏈表1

搞清楚: p1 = p1.next & p1.next=p2.next

058 鏈表 e06 合并有序鏈表2

058 鏈表 e07 合并多個有序鏈表

058 鏈表 e08 查找鏈表中間節點

058 鏈表 e09 判斷回文鏈表1

058 鏈表 e09 判斷回文鏈表2


057 多路遞歸 e03 楊輝三角2

thinking:二維數組的動態初始化?

Java 中的一維數組以及二維數組(8千字零基礎超全詳解)_java一維數組和二維數組-CSDN博客

057 多路遞歸 e03 楊輝三角3

058 鏈表 e01 反轉單向鏈表1

不斷創建新的節點,相當于復制黏貼一份鏈表了

說明可以單獨訪問ListNode里的val或者單獨訪問ListNode里的next。?

a:設置新鏈表第一個節點的value值,不用設置指針。

b:舊鏈表的第一個節點

c:創建一個ListNode,值為舊鏈表第一個節點的value,指向:新鏈表的頭部;并且,更新新鏈表的頭部。這里左側的n1代表一個節點,是包含vaule值和指向的節點,右側的n1只有指向的含義。(右側的n1也可以理解成,現在新建的節點和n1指向的方向相同。)

d:舊鏈表中的元素變成下一個舊鏈表元素

直到舊鏈表所有的元素插入完畢。

? ? ? ?和這里很相似,創建了一個新節點后,再讓頭部指向新的節點。因此,剛剛案例中,所謂的更新,也可以理解成讓n1指向新的節點?,也就是讓舊的節點指向新的節點(1指向2),因為1先插入,2后插入。

058 鏈表 e01 反轉單向鏈表2

first.next 指向head,其中first.next是指指針。就是這個指針指向head

head更新為first=將first的值賦值給head

058 鏈表 e01 反轉單向鏈表3 遞歸

?p.next 為5 這個東西,5.next 是這個東西的指向。所以就是p.next.next

讓4指向null,而不是像原先一樣還指向5,這樣不會造成死循環

058 鏈表 e01 反轉單向鏈表4

將舊鏈表的第二個節點移動到新鏈表的頭部

o2.next 指針含義:o2指向o3

那現在讓o1.next =o2.next 就是說,讓o1像o2一樣指向o3,也就是說,o2斷開了?。

為什么是returnn1呢?也就是新頭,而不是一整個鏈表?

? ? ? ?因為它每一次傳進來的都是一個元素,那就只對這個元素進行加工,并且之前還設置了toString方法,就是為了拼接這些元素的。?

-----------------------------------------------第二天想法--------------------------------------------------------------

噢我好像知道為什么直接返回n1就可以了,我一開始以為,返回n1就只返回一個元素,原來,返回n1就返回n1以及n1后面元素組成的這一條鏈子。!!?

------------------------------------------------------------------------------------------------------------------------------

058 鏈表 e01 反轉單向鏈表5

和方法2類似,方法2是面向對象,方法5是面向過程

n1 = o1: n1做了o1該做的事情,或者說o1的責任賦予給n1了。于是乎

o1 = o2 : o1就要回到舊鏈表中,那它要回到哪里去呢?它要回到的位置就是o2幫他記錄的位置。?

058 鏈表 e02 根據值刪除節點1

p1要刪除節點的上一個指針

p2要刪除節點的指針

理解:

p1.next = p2.next??

是指p1的指針等于p2的指針,而指針的作用是用于指明方向,因此意思為:p1指向的位置是p2指向的位置

p2 = p2.next?

這里的右邊是指 p2的下一個節點,整句話的意思是:將p2的下一個所有東西賦予給p2

也意味著p2向后平移了一位(假設現在鏈表不動,是指針在動)

優化:要不是原來的方案:舊的p2指向的下一位;或者新的方案:刪除后,p1指向的下一位

058 鏈表 e02 根據值刪除節點2

返回 p的下一個節點的指針以及值?

針對p.next =removeElements(p.next,val)這一塊,左邊的含義是:自身的指針要更新一下,不然一直在原地不動。那,需要更新一下的話,那要更新成什么樣子的呢?也就是說,這個指針要被賦予的值是什么呢?這個值從哪里來呢?就從右邊來的。p.next :下一個節點開始刪,removeElements() :刪完之后的那個鏈表,作為我當前節點的鏈表。

就拿這個做例子,數組是:1,2,6,3,6

現在進行到:1,2,6,3到1,2,6這一步

p.next: 指針現在指著3 那刪除之后,應該移動到6 (從下一個節點開始刪)

removeElements() :1,2,6(刪完之后的那個鏈表,作為我當前節點的鏈表)

我們再看,它的方法返回的是 3->null 這樣的,所以挺有那感覺。

嗚嗚盡力了,只能先理解到這里了。

--------------------------------------第二天的思路-------------------------------------------------------

右側:更新完了。左側:那就在你更新完之后的下一個節點開始。

----------------------------------------------------------------------------------------------------------------

058 鏈表 e03 刪除倒數節點1 遞歸

返回 0 代表倒數第0個

返回1 代表倒數第1個

返回2 代表倒數第2個?

如果p==null的話,返回0。也就是說,代表null在倒數第0個位置?

左邊和右邊的數字分別代表:每個節點,每個節點的下一個節點的倒數位置

如果,傳過來的n等于nth(nth:每個節點的下一個節點的倒數位置)?

舉個例子:p=3,那nth就是它的下一個節點的倒數位置,也就是4的倒數位置,4的倒數位置是2。現在要刪掉4。因此讓p=3指向p=5。

對于第一個節點來說,沒有上一個節點了。但我們之前處理的辦法都是:處理這個節點的下一個節點。因此,節點1 知道節點2 的位置,但是沒有人知道節點1在哪里。因此加一個哨兵。

058 鏈表 e03 刪除倒數節點2

方法二:設置兩個指針,先讓p2走n+1步。之后再讓p1,p2一起走,p2走多少步,p1就走多少步,要保持p1和p2的距離保持n+1,直到p2走到null為止。這樣,p1的下一個位置就是我要刪除的元素。

這里的n=2,是指我要刪除的是倒數第二個位置的元素,也就是4這個元素。

?p1.next :p1的指針

p1.next.next:p5

=:讓p1的指針指向p5

058 鏈表 e04 有序鏈表去重1

為p2賦值?

p1.next = p2.next :p1的指針方向現在改為p2的指針方向。因此,也代表p1向后平移一位。

058 鏈表 e04 有序鏈表去重2 遞歸

方法二:若第一個節點和第二個節點的取值相同的時候,不要第一個節點,要第二個節點。

2和3作比較的時候,若不相同,返回我(2),并且next更新為下一個節點,也就是p=3?

右側:更新完了。左側:那就在你更新完之后的下一個節點開始。

好像前面那道題也是差不多這樣的意思。?哎喲,好像明白了。

058 鏈表 e05 有序鏈表去重1 遞歸

058 鏈表 e05 有序鏈表去重2

058 鏈表 e06 合并有序鏈表1

搞清楚: p1 = p1.next & p1.next=p2.next

?第一個是:p1指向? p1下一個指向???的值,也就是p2。也就是指針往后平移一位

第二個是:p1的指針等于p2的指針,也就是 p2指向的方向現在也變成了p1指向的方向,也就是說p1指向了p3

058 鏈表 e06 合并有序鏈表2

4.next在8和9之間選擇。也就是4.next是這個mergeTwoLists方法得出的結果

?

058 鏈表 e07 合并多個有序鏈表

先把多個鏈表拆分,最后再合成變成一個數組。?

前者:多路遞歸較多體現

后者:單路遞歸較多體現,并沒有拆分為兩個或以上問題,只是相同的問題,但是問題規模減小;了。?

058 鏈表 e08 查找鏈表中間節點

奇數情況。

偶數情況。

不管奇數偶數,都是慢指針走一步,快指針走兩步。直到快指針走到null或者走到null的前一位,就停止,這個時候,慢指針指的就是中間位置。?

p2 != null要寫在前面,因為如果這個條件不成立的話,就不會執行第二個條件了,它的執行是有順序的。

058 鏈表 e09 判斷回文鏈表1

噢我好像知道為什么直接返回p1就可以了,我一開始以為,返回p1就只返回一個元素,原來,返回p1就返回p1以及p1后面元素組成的這一條鏈子。!!?

058 鏈表 e09 判斷回文鏈表2

使分開的方法合并到一起?

?

方法二:

既找到中間點,同時也讓前半部分的元素進行反轉。

以上這張圖是之前的案例的解釋?

部分代碼詳解:

ListNode o2 =o1.next: 舊頭的第二個位置命名為o2

o1.next=n1: o1這個舊頭的指針指向n1這個新頭,也就是o1所在的元素移動到新隊伍當中去了,(看3搬移那里)。

n1 = o1: o1要把責任交給n1了

o1 =? o2:o1要回去舊隊伍了。

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

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

相關文章

【Cisco Packet Tracer】路由器 NAT實驗

NAT的實現方式有三種,即靜態轉換Static Nat、動態轉換Dynamic Nat和端口多路復用OverLoad。 靜態轉換是指內部本地地址一對一轉換成內部全局地址,相當內部本地的每一臺PC都綁定了一個全局地址。一般用于在內網中對外提供服務的服務器。 [3] 動態轉換是指…

C++ 迭代器

迭代器 迭代器類似于指針類型,也提供了對對象的間接訪問。 就迭代器而言,其對象是容器中的元素或 string 對象中的字符。 獲取迭代器 容器的迭代器類型 使用作用域運算符來說明我們希望使用的類型成員;例:string::iterator it…

探秘MSSQL存儲過程:功能、用法及實戰案例

在現代軟件開發中,高效地操作數據庫是至關重要的。而MSSQL(Microsoft SQL Server)作為一款強大的關系型數據庫管理系統,為我們提供了豐富的功能和工具來處理數據。其中,MSSQL存儲過程是一項強大而又常用的功能&#xf…

改進YOLOv8注意力系列一:結合ACmix、Biformer、BAM注意力機制

???改進YOLOv8注意力系列一:結合ACmix、Biformer、BAM注意力機制 代碼ACmixBiFormerBAMBlock加入方法各種yaml加入結構本文提供了改進 YOLOv8注意力系列包含不同的注意力機制以及多種加入方式,在本文中具有完整的代碼和包含多種更有效加入YOLOv8中的yaml結構,讀者可以獲…

C++ 的關鍵字(保留字)介紹

一.C中部分關鍵字的用法 1. auto 關鍵字auto是C11引入的,它可以用于變量聲明和函數返回類型的推導。當你不關心變量的具體類型時,可以使用auto來讓編譯器根據初始化表達式推導出變量的類型。這樣可以簡化代碼,提高可讀性。 1.在for循環中遍…

Mysql索引一篇就夠了

索引 定義 索引是對數據庫表中一列或者多列的值進行排序的結構。 目的 數據庫索引好比一本書的目錄,提高查詢效率。但是為表設置索引要付出相應的代價: 增加了數據庫的存儲空間 在插入和修改時需花費更多的時間(因為索引也要隨之變動&#…

一、C#筆記

1.注釋 /*多行注釋*/class HelloWorld{ void Hello(){Console.WriteLine("Hello!");//單行注釋}} 2.理解語句 2.1方法、語法、語義 2.2使用標識符 標識符語法規則: 只能使用字母(大寫和小寫)、數字和下劃…

C++相關閑碎記錄(5)

1、容器提供的類型 2、Array Array大小固定&#xff0c;只允許替換元素的值&#xff0c;不能增加或者移除元素改變大小。Array是一種有序集合&#xff0c;支持隨機訪問。 std::array<int, 4> x; //elements of x have undefined value std::array<int, 5> x {…

滲透測試——七、網站漏洞——命令注入和跨站請求偽造(CSRF)

滲透測試 一、命令注入二、跨站請求偽造(CSRF)三、命令注入頁面之注人測試四、CSRF頁面之請求偽造測試 一、命令注入 命令注入(命令執行) 漏洞是指在網頁代碼中有時需要調用一些執行系統命令的函數例如 system()、exec()、shell_exec()、eval()、passthru()&#xff0c;代碼未…

基于ssm在線云音樂系統的設計與實現論文

摘 要 隨著移動互聯網時代的發展&#xff0c;網絡的使用越來越普及&#xff0c;用戶在獲取和存儲信息方面也會有激動人心的時刻。音樂也將慢慢融入人們的生活中。影響和改變我們的生活。隨著當今各種流行音樂的流行&#xff0c;人們在日常生活中經常會用到的就是在線云音樂系統…

走迷宮(詳細分析)

目錄 一、課題描述 輸入樣例&#xff1a; 輸出樣例&#xff1a; 二、需求分析 輸入的形式和輸入值的范圍&#xff1a; 輸出的形式&#xff1a; 程序所能達到的功能&#xff1a; 三、概要設計 四、流程圖 五 、代碼詳細注釋 六、測試數據和結果 一、課題描述 以一個…

freeswitch webrtc video_demo客戶端進行MCU的視頻會議

系統環境 一、編譯服務器和加載模塊 二、下載編譯指定版本video_demo 三、配置verto.conf.xml 1.修改配置文件 2.重新啟動 四、MCU通話測試 1.如何使用video_demo 2.測試結果 五、MCU的通話原理及音頻/視頻/布局/管理員等參數配置 附錄 freeswitch微信交流群 系統環境 lsb_rel…

MyBatis處理映射關系

在Mybatis實現數據處理過程中&#xff0c;字段名符合數據庫的規則&#xff0c;屬性一般為駝峰規則&#xff0c;因此字段名和屬性名通常不一致&#xff0c;此時可以通過以下兩種方式對數據庫字段進行映射處理&#xff1a; 為字段起別名&#xff0c;保證和實體類中的屬性名一致在…

lv11 嵌入式開發 IIC(下) 20

目錄 1 Exynos4412下IIC控制器介紹 1.1 總覽 1.2 特征 1.3 工作框圖 1.4 其他內容介紹 1.5 四種工作模式寄存器流程 2 IIC寄存器詳解 2.1 概述 2.2 控制寄存器 2.3 狀態寄存器 2.4 地址寄存器 2.5 數據寄存器 2.6 其他寄存器 3 MPU06050 3.1 簡介 3.2 MPU6050主…

HJ103 Redraiment的走法

題目&#xff1a; HJ103 Redraiment的走法 題解&#xff1a; dfs 暴力搜索 枚舉數組元素&#xff0c;作為起點如果后續節點大于當前節點&#xff0c;繼續向后搜索記錄每個起點的結果&#xff0c;求出最大值 public int getLongestSub(int[] arr) {int max 0;for (int i 0…

data_loader返回的每個batch的數據大小是怎么計算得到的?

data_loader是一個通用的術語&#xff0c;用于表示數據加載器或數據批次生成器。它是在機器學習和深度學習中常用的一個概念。 一、data loader 數據加載器&#xff08;data loader&#xff09;是一個用于加載和處理數據集的工具&#xff0c;它可以將數據集劃分為小批次&#…

提示(Prompt)工程中提示詞的開發優化基礎概念學習總結

本文對學習過程進行總結&#xff0c;僅對基本思路進行說明&#xff0c;結果在不同的模型上會有差異。 提示與提示工程 提示&#xff1a;指的是向大語言模型輸入的特定短語或文本&#xff0c;用于引導模型產生特定的輸出&#xff0c;以便模型能夠生成符合用戶需求的回應。 提示…

內存學習——堆(heap)

目錄 一、概念二、自定義malloc函數三、Debug運行四、heap_4簡單分析4.1 heap管理鏈表結構體4.2 堆初始化4.3 malloc使用4.4 free使用 一、概念 內存分為堆和棧兩部分&#xff1a; 棧&#xff08;Stack&#xff09;是一種后進先出&#xff08;LIFO&#xff09;的數據結構&…

AVFormatContext封裝層:理論與實戰

文章目錄 前言一、封裝格式簡介1、FFmpeg 中的封裝格式2、查看 FFmpeg 支持的封裝格式 二、API 介紹三、 實戰 1&#xff1a;解封裝1、原理講解2、示例源碼 13、運行結果 14、示例源碼 25、運行結果 2 四、 實戰 2&#xff1a;轉封裝1、原理講解2、示例源碼3、運行結果 前言 A…

文章解讀與仿真程序復現思路——電力系統自動化EI\CSCD\北大核心《考慮電力-交通交互的配電網故障下電動汽車充電演化特性》

這個標題涉及到電力系統、交通系統和電動汽車充電的復雜主題。讓我們逐步解讀&#xff1a; 考慮電力-交通交互的配電網故障&#xff1a; 電力-交通交互&#xff1a; 指的是電力系統和交通系統之間相互影響、相互關聯的關系。這可能涉及到電力需求對交通流量的影響&#xff0c;反…