【LeetCode】九、雙指針算法:環形鏈表檢測 + 救生艇

文章目錄

  • 1、雙指針算法
    • 1.1 對撞雙指針
    • 1.2 快慢雙指針
  • 2、leetcode141:環形鏈表
  • 3、leetcode881:救生艇

1、雙指針算法

用兩個指針來共同解決一個問題:

在這里插入圖片描述

1.1 對撞雙指針

比如先有一個有序的數組array

int[] array = {1, 4, 5, 7, 9}

先要找兩個數,使得其和為12,且兩個數不能相同。最先想到的是,兩層循環,遍歷array,如外層 i = 1,內層循環 j = 4 5 7 9,外層 i = 4,內層循環 j = 1 5 7 9……,但這樣時間復雜度為O(n^2)。用對撞雙指針優化:

在這里插入圖片描述

在這里插入圖片描述
對撞前即p1 <= p2,p1 = p2時,說明二者指向同一個元素,再往下就錯開了。

1.2 快慢雙指針

比如現在要檢測一個鏈表是否為環形:

在這里插入圖片描述

此時可用快慢雙指針,慢的一次走一步,s = s.next,快的一次走兩步,f = f.next.next,二者同時從隊首出發:

在這里插入圖片描述

移動三次后,快慢指針相遇了,這說明是個環形,否則二者不會相遇。

2、leetcode141:環形鏈表

在這里插入圖片描述
和上面的快慢指針一樣,代碼實現:

public class P141 {public static boolean checkCycle(ListNode head) {if (null == head) {return false;}// 快慢指針,均從頭節點開始ListNode slowPoint = head;ListNode fastPoint = head;// 這里的條件無需判斷慢指針,如果是環形,大家都不為null// 如果不是環形,那一定是快指針先走完而出現null// 因此退出循環的條件是:快指針走完了,而快指針一次兩步,所以走完的條件是當前已為空或者不夠兩步了while(fastPoint != null && fastPoint.next != null) {// 慢指針一次一步,快指針一次兩步slowPoint = slowPoint.next;fastPoint = fastPoint.next.next;if (slowPoint.equals(fastPoint)){return true;}}return false;}
}

測試:

//鏈表節點類
public class ListNode {int val;ListNode next;public ListNode() {}public ListNode(int val, ListNode next) {this.val = val;this.next = next;}@Overridepublic String toString() {return "ListNode{" +"val=" + val +", next=" + next +'}';}
}
public class P141 {public static void main(String[] args) {ListNode tailNode = new ListNode(1, null);ListNode node4 = new ListNode(2, tailNode);ListNode node3 = new ListNode(2, node4);ListNode node2 = new ListNode(1, node3);ListNode node1 = new ListNode(0, node2);ListNode head = new ListNode(9, node1);tailNode.setNext(head);System.out.println(checkCycle(head));}
}

在這里插入圖片描述

3、leetcode881:救生艇

在這里插入圖片描述
其實本質是兩個人的體重之和問題,和上面提到的對撞指針很像,不過一個是等號,一個是小于號,因此考慮先給所有人的體重從小到大排個序(因為排序是對撞指針移動的基礎前提)

public class P881 {public static int calcMinShipNum (int[] weight, int limit) {if (weight == null || weight.length == 0 || limit <= 0) {return 0;}Arrays.sort(weight);// 頭尾指針的位置int i = 0;int j = weight.length - 1;// 船的數量int res = 0;while (i <= j) {if (weight[i] + weight[j] < limit) {// 兩個人可以乘一條船走,船的數量+1,頭指針向右一位,尾指針向左一位i = i + 1;j = j - 1;} else {// 兩個人體重總和超重,只讓最胖的人走j = j - 1;}// 不管這輪是載走了首位兩個人,還是只能帶走最胖的那個人,船的數量都+1res = res + 1;}return res;}
}

測試:


public class P881 {public static void main(String[] args) {int[] weightArray = {3,5,3,4};System.out.println(calcMinShipNum(weightArray, 5));}
}

在這里插入圖片描述

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

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

相關文章

什么是產線工控安全,如何保障產線設備的安全

什么是產線工控安全&#xff1f; 工控&#xff0c;指的是工業自動化控制&#xff0c;主要利用電子電氣、機械、軟件組合實現。即是工業控制系統&#xff0c;或者是工廠自動化控制。產線工控安全指的是工業控制系統的數據、網絡和系統安全。隨著工業信息化的迅猛發展&#xff0…

如何利用“AI交互數字人+展廳”拓展文娛消費空間?

打造新生代潮玩聚集地&#xff0c;打造演藝新空間&#xff0c;促進虛擬現實體驗等文娛業態場景創新&#xff0c;成為了當下發展文旅消費新場景的一大重要手段。數字人匯集了虛擬現實、增強現實、全息投影、人工智能、實時傳輸語音合成等數字技術&#xff0c;可以利用數字人重構…

SpringBoot項目中獲取IP地址

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言 OkHttp 是一個由 Square 開發的高效、現代的 HTTP 客戶端庫&#xff0c;用于 Android 和 Java 應用程序。它支持 HTTP/2 和 SPDY 等現代網絡協議&#xff0c;…

Jmeter 進行http接口測試

&#x1f345; 視頻學習&#xff1a;文末有免費的配套視頻可觀看 &#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 本文主要針對http接口進行測試&#xff0c;使用 jmeter工具實現。 Jmeter工具設計之初是用于做性…

如何用Vue3和Plotly.js繪制動態3D圖表?

本文由ScriptEcho平臺提供技術支持 項目地址&#xff1a;傳送門 Plotly.js: 使用Vue.js動態加載數據并繪制圖表 應用場景 在數據可視化應用中&#xff0c;需要將數據動態加載到圖表中并進行實時更新。本文將展示如何使用Plotly.js和Vue.js實現這一功能&#xff0c;從加載外…

MobPush iOS端海外推送最佳實現

推送注冊 在AppDelegate里進行SDK初始化&#xff08;也可以在Info.plist文件中進行AppKey&#xff0c;AppSecret的配置&#xff09;并對通知功能進行注冊以及設置推送的環境和切換海外服務器等&#xff0c;參考如下步驟代碼&#xff1a; <span style"background-colo…

【深度學習】圖形模型基礎(1):使用潛在變量模型進行數據分析的box循環

1.緒論 探索數據背后的隱藏規律&#xff0c;這不僅是數據分析的藝術&#xff0c;更是概率模型展現其威力的舞臺。在這一過程中&#xff0c;潛在變量模型尤為關鍵&#xff0c;它成為了數據驅動問題解決的核心引擎。潛在變量模型的基本理念在于&#xff0c;那些看似復雜、雜亂無…

又是一篇關于GD32堆棧的梳理+FreeRTOS的空間

GD32F103CB&#xff1a;SRAM 20K&#xff08;0x5000&#xff09; 這篇文章主要想講清楚幾個事情&#xff1a; 1、啟動文件Stack_Size、Heap_Size的大小設置有啥影響&#xff1b; 2、FreeRTOS的內存&#xff1a;FreeRTOSConfig.h文件configTOTAL_HEAP_SIZE&#xff1b; 問題2…

訊飛星火V4.0 發布,全面對標GPT-4 Turbo

6月27日&#xff0c;訊飛星火V4.0如期而至&#xff0c;升級成為更懂你的AI助手。 七大核心能力持續突破&#xff0c;全面對標GPT-4 Turbo。在8個國際主流測試集中排名第一&#xff0c;訊飛星火以一份惹眼的成績單&#xff0c;成為國內大模型的先行者。 發布會現場&#xff0c…

一個簡單易用,跨平臺的通用版本管理器,VMR

項目主頁&#xff1a;https://vdocs.vmr.us.kg/zh-cn/ 歡迎PR&#xff0c;Issue&#xff0c;Star。 類別&#xff1a;Go 項目標題&#xff1a;一個簡單易用&#xff0c;跨平臺卻非常強大的通用版本管理器&#xff0c;VMR 項目描述&#xff1a; 目前各種SDK版本管理器存在以下…

用數組模擬棧實現遞歸函數模擬

做算法課設時候看到題目要求模擬函數遞歸時候棧的入棧出棧過程。本來想著直接調用系統遞歸函數即可&#xff0c;可是發現系統函數棧的空間非常小大約只有3000層&#xff0c;很容易爆棧。于是便有了用棧去模擬遞歸函數的想法&#xff0c;但是上網查了下貌似相關代碼比較少&#…

小馬搬運物品-第13屆藍橋杯省賽Python真題精選

[導讀]&#xff1a;超平老師的Scratch藍橋杯真題解讀系列在推出之后&#xff0c;受到了廣大老師和家長的好評&#xff0c;非常感謝各位的認可和厚愛。作為回饋&#xff0c;超平老師計劃推出《Python藍橋杯真題解析100講》&#xff0c;這是解讀系列的第89講。 小馬搬運物品&…

如何與Honda建立EDI連接?

你是本田Honda的新供應商&#xff0c;需要具備EDI電子數據交換功能嗎&#xff1f;在與本田Honda交換EDI消息時需要幫助嗎&#xff1f;本文將帶你快速了解Honda的EDI需求&#xff0c;明確EDI對接需要完成的工作。 項目背景 本田是一家世界領先的汽車制造商&#xff0c;在全球2…

倉庫選址問題【數學規劃的應用(含代碼)】阿里達院MindOpt

本文主要講述使用MindOpt工具優化倉庫選址的數學規劃問題。 視頻講解&#x1f448;&#x1f448;&#x1f448;&#x1f448;&#x1f448;&#x1f448;&#x1f448;&#x1f448;&#x1f448; 一、案例場景 倉庫選址問題在現代物流和供應鏈管理中具有重要的應用。因為倉庫…

《數據結構與算法基礎 by王卓老師》學習筆記——2.2線性表的案例引入

案例一&#xff1a;一元多項式的運算 案例二&#xff1a;稀疏多項式的運算 案例三&#xff1a;圖書信息管理系統 總結

【Leetcode】520. 檢測大寫字母

文章目錄 題目思路代碼復雜度分析時間復雜度空間復雜度 結果總結 題目 題目鏈接&#x1f517;我們定義&#xff0c;在以下情況時&#xff0c;單詞的大寫用法是正確的&#xff1a; 全部字母都是大寫&#xff0c;比如 “USA” 。單詞中所有字母都不是大寫&#xff0c;比如 “le…

Mybatis入門——語法詳解:基礎使用、增刪改查、起別名、解決問題、注釋、動態查詢,從入門到進階

文章目錄 1.基礎使用1.添加依賴2.在resouces文件下新建xml文件db.properties3.在resouces文件下新建xml文件mybatis-config-xml4.創建一個MybatisUtils工具類5.創建xml文件XxxMapper.xml映射dao層接口6.添加日志5.測試 2.增刪改查1.select2.delete3.update4.insert5.模糊查詢6.…

同心創建 共踐食安 | 趙夢澈榮獲食品安全大使

“民族要復興&#xff0c;鄉村必振興”&#xff0c;為深入貫徹落實國家鄉村振興戰略&#xff0c;推進鄉村全面振興不斷取得新成效&#xff0c;助力全國優質食品農產品的宣傳推廣、市場營銷、品牌創建工作&#xff0c;由中國食品安全報社主辦&#xff0c;商業發展中心、健康中國…

python數據分析與可視化一

公共部分 # 引入數據分析工具 Pandas import pandas as pd # 引入數據可視化工具 Matplotlib import matplotlib.pyplot as plt # 引入數據可視化工具 Seaborn (基于matplotlib) import seaborn as sns # 解決輸出時的列名對齊問題 pd.set_option(display.unicode.east_…

Python多線程編程詳解

Python多線程編程詳解 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 多線程編程是利用計算機多核心和多線程處理器的優勢&#xff0c;提高程序并發性能的重要…