leetcode力扣_雙指針問題

141. 環形鏈表

思路:判斷鏈表中是否有環是經典的算法問題之一。常見的解決方案有多種,其中最經典、有效的一種方法是使用 快慢指針(Floyd’s Cycle-Finding Algorithm)

  • 初始化兩個指針:一個快指針(fast)指向頭節點的下一個節點(head->next),一個慢指針(slow)指向頭節點(head)。
  • 移動指針
    • 慢指針每次移動一步。
    • 快指針每次移動兩步。
  • 判斷環的存在
    • 如果鏈表中存在環,那么快指針和慢指針最終會在環中相遇。
    • 如果鏈表沒有環,快指針會遇到 NULL(鏈表的末尾)。

解答如下:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:bool hasCycle(ListNode *head) {//如果頭指針為空或者下一個為空即鏈表只有一個元素//那么這個鏈表就不是循環的if(head == nullptr  || head->next == nullptr ){return false ;}ListNode* slow = head;ListNode* fast = head->next;//循環停止的條件是slow和fast指向同一個元素//或者 fast或fast->next指向NULLwhile(slow != fast){if(fast == nullptr  || fast->next == nullptr ){return false ;}slow = slow->next ;fast = fast->next->next ;}return true ;}
};

循環條件也可以改為其他的形式,或者使用do-while循環,使用do-while循環,則需要對fast和slow的初值進行更改:

//使用do-while循環
class Solution {
public:bool hasCycle(ListNode *head) {//如果頭指針為空或者下一個為空即鏈表只有一個元素//那么這個鏈表就不是循環的if(head == nullptr  || head->next == nullptr ){return false ;}ListNode* slow = head;ListNode* fast = head;//循環停止的條件是slow和fast指向同一個元素//或者 fast或fast->next指向NULLdo{if(fast == nullptr || fast->next == nullptr){return false ;}slow = slow->next ;fast = fast->next->next ;}while(slow != fast);return true ;}
};

另外也可以將fast != nullptr && fast->next != nullptr放在外層:

class Solution {
public:bool hasCycle(ListNode *head) {//如果頭指針為空或者下一個為空即鏈表只有一個元素//那么這個鏈表就不是循環的if(head == nullptr  || head->next == nullptr ){return false ;}ListNode* slow = head;ListNode* fast = head;//循環停止的條件是slow和fast指向同一個元素//或者 fast或fast->next指向NULLwhile(fast != nullptr && fast->next != nullptr){//在循環中應首先移動指針,然后再檢查 slow 和 fast 是否相等slow = slow->next ;fast = fast->next->next ;if(slow == fast){return true ;}}return false ;}
};

524.?通過刪除字母匹配到字典里最長單詞

題目描述:給你一個字符串?s?和一個字符串數組?dictionary?,找出并返回?dictionary?中最長的字符串,該字符串可以通過刪除?s?中的某些字符得到。如果答案不止一個,返回長度最長且字母序最小的字符串。如果答案不存在,則返回空字符串。

思路:開始自己想起來有點亂糟糟的,看了一下官方給的思路,然后理了一下。

在寫的過程中,while塊中的語句些的稍微復雜了一點,看了別人的代碼后改了一下,原來是這樣寫的:完全按照想的邏輯,沒有思考簡化

while(m<slen){//只要還沒將s搜索完就要繼續搜索if(s[m] == dictionary[i][d]){d++;m++;} else{m++;}
}

然后就是if塊中的代碼,寫得亂糟糟的也,看了一下別人的代碼,茅塞頓開,我寫的時候在想,怎么才能順利的存進去第一個滿足要求的字符串,因為最開始沒有目標字符串,怎么比較長度呢,后來知道使用默認構造函數 string ans; 定義一個 std::string 對象時,它會被初始化為一個空字符串,長度為0,所以可以這樣直接比較。

基礎薄弱腦袋空空

正確代碼如下:

class Solution {
public:string findLongestWord(string s, vector<string>& dictionary) {int k = dictionary.size();//長度為4int slen = s.length();//長度為8string obj ;for(int i = 0;i<k;i++){//int cnt = 0;//獲得每一個元素的長度lenint len = dictionary[i].size();//例如第一個元素為ale,長度就為3//下面判斷該元素是不是字符串s的子元素int m=0,d=0;while(m<slen){//只要還沒將s搜索完就要繼續搜索if(s[m] == dictionary[i][d]){d++;} m++;}//cnt==len說明該字符串在字典中存在if(d == len ){if(len > obj.length()){obj = dictionary[i];//有點奇怪,為什么要加一個dictionary[i] < obj這個條件//原題目中字母序最小的字母序最小的字符串是這個意思嘛//比較相同長度的字符串的大小,輸出小的作為最后的結果} else if((len == obj.length()) && dictionary[i] < obj){obj = dictionary[i] ;} else{obj = obj ;}}}return obj;}
};//csdn上的答案
/*class Solution {
public:string findLongestWord(string s, vector<string>& dictionary) {//處理string ans;int n = s.size();//字符串的長度//auto& str : dictionary 是 C++11 引入的范圍基 for 循環的一部分//用于遍歷容器 dictionary 中的每個元素,并使用 str 作為對每個元素的引用。for (auto& str : dictionary){int m = str.size();//dictionary中元素的長度int i = 0, j = 0;while (i < m && j < n){if (str[i] == s[j]) i++;j++;}//處理if (i == m){if (str.size() > ans.size()){ans = str;}else if (str.size() == ans.size() && str < ans){ans = str;}}}return ans;}
};*/

雙指針問題告一小段落,前面還有幾題寫了但是沒有記錄,懶得再整理了力扣上留有痕跡

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

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

相關文章

uni-app 使用Pinia進行全局狀態管理并持久化數據

1.引言 最近在學習移動端的開發&#xff0c;使用uni-app前端應用框架&#xff0c;通過學習B站的視頻以及找了一個開發模板&#xff0c;終于是有了一些心得體會。 B站視頻1&#xff1a;Day1-01-uni-app小兔鮮兒導學視頻_嗶哩嗶哩_bilibili B站視頻2&#xff1a;01-課程和uni的…

JavaScript——for in類型

目錄 任務描述 相關知識 for in型 編程要求 任務描述 蘋果apple有多個屬性表示它的產地&#xff0c;比如locationProvince表示省份&#xff0c;這些屬性都以location開頭&#xff0c;和產地無關的屬性都不以location開頭。 本關任務&#xff1a;完成一個計算蘋果產地的函數…

[FFmpeg] windows下安裝帶gpu加速的ffmpeg

1.顯卡能力排查 目前只有 NIVIDIA 支持 ffmpeg 的 gpu加速(AMD貌似也陸續開始支持)。 在下述網站中查找自己的顯卡能夠支持的編解碼格式。https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-newhttps://developer.nvidia.com/video-encode-and-decod…

Vue88-Vuex中的mapActions、mapMutations

一、mapMutations的調用 此時結果不對&#xff0c;因為&#xff1a;若是點擊事件不傳值&#xff0c;默認傳的是event&#xff01;&#xff0c;所以&#xff0c;修改如下&#xff1a; 解決方式1&#xff1a; 解決方式2&#xff1a; 不推薦&#xff0c;寫法麻煩&#xff01; 1-…

【Unity數據交互】二進制私

&#x1f468;?&#x1f4bb;個人主頁&#xff1a;元宇宙-秩沅 &#x1f468;?&#x1f4bb; hallo 歡迎 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;?&#x1f4bb; 本文由 秩沅 原創 &#x1f468;?&#x1f4bb; 專欄交流&#x1f9e7;&…

Bootstrap 5 小工具

Bootstrap 5 小工具 Bootstrap 5 是一個流行的前端框架,它提供了一系列的工具和組件,幫助開發者快速構建響應式和移動優先的網頁。在本文中,我們將探討 Bootstrap 5 中的一些實用小工具,這些工具可以極大地提高開發效率和用戶體驗。 1. 網格系統 Bootstrap 5 的網格系統…

Laravel 宏指令(Macro)動態添加自定義方法到Laravel的核心組件中

Laravel 宏指令&#xff08;Macro&#xff09; 在Laravel中&#xff0c;宏指令&#xff08;Macro&#xff09;是一種靈活的方式&#xff0c;允許您動態添加自定義方法到Laravel的核心組件中&#xff0c;如模型、查詢構建器、集合等&#xff0c;以便在不改變核心代碼的情況下擴展…

電腦硬盤分區的基本步驟(2個實用的硬盤分區方法)

在現代計算機中&#xff0c;硬盤分區是非常重要的一步。無論是新硬盤的初始化&#xff0c;還是重新組織現有硬盤&#xff0c;分區都是必不可少的操作。本文將詳細介紹電腦硬盤分區的基本步驟&#xff0c;幫助您更好地管理和利用硬盤空間。 文章開始&#xff0c;我們先簡單說一…

【C++】 解決 C++ 語言報錯:Invalid Conversion from ‘const char*’ to ‘char*’

文章目錄 引言 在 C 編程中&#xff0c;類型轉換錯誤&#xff08;Invalid Conversion&#xff09;是常見的編譯錯誤之一。特別是當程序試圖將一個常量字符指針&#xff08;const char*&#xff09;轉換為非常量字符指針&#xff08;char*&#xff09;時&#xff0c;會導致編譯…

Vmware環境下ESXi主機 配置上行鏈路、虛擬交換機、端口組、VMkernel網卡

一、適用場景 1、使用專業服務器跑多種不同的業務&#xff0c;每種業務可能所需運行的server環境不同&#xff0c;有的需要Linux server CentOS7/8、kali、unbuntu……有的需要windows server2008、2003、2016、2019、2022…… 2、本例采用的是VMware ESXi6.7 update 3版本&am…

力扣習題--找不同

目錄 前言 題目和解析 1、找不同 2、 思路和解析 總結 前言 本系列的所有習題均來自于力扣網站LeetBook - 力扣&#xff08;LeetCode&#xff09;全球極客摯愛的技術成長平臺 題目和解析 1、找不同 給定兩個字符串 s 和 t &#xff0c;它們只包含小寫字母。 字符串 t…

Java Maven中自動代碼檢查插件詳細介紹

文章目錄 Checkstyle主要特點使用場景配置與使用checkstyle.xmlsuppressions.xml 驗證打包時驗證執行命令驗證 Spotless配置文件內容Java配置部分POM 配置部分Markdown 配置部分Up to Date Checking執行部分 驗證打包時驗證在插件中執行命令驗證 Checkstyle Spotless 結合chec…

ABAP中BAPI_CURRENCY_CONV_TO_INTERNAL 函數的使用方法

在ABAP中&#xff0c;BAPI_CURRENCY_CONV_TO_INTERNAL 函數模塊主要用于將外部金額轉換為內部存儲格式。這對于確保金額數據在SAP系統中的一致性和準確性至關重要。以下是關于該函數模塊使用方法的詳細解釋&#xff1a; 函數模塊參數 調用 BAPI_CURRENCY_CONV_TO_INTERNAL 時…

redis學習(005 java客戶端 RedisTemplate學習)

黑馬程序員Redis入門到實戰教程&#xff0c;深度透析redis底層原理redis分布式鎖企業解決方案黑馬點評實戰項目 總時長 42:48:00 共175P 此文章包含第16p-第p23的內容 文章目錄 java客戶端jedisSpringDataRedis項目實現hash哈希操作 java客戶端 jedis 測試 ps:如果連接不上&…

vs2019 無法打開項目文件

vs2019 無法打開項目文件&#xff0c;無法找到 .NET SDK。請檢查確保已安裝此項且 global.json 中指定的版本(如有)與所安裝的版本相匹配 原因&#xff1a;缺少組件 解決方案&#xff1a;選擇需要的組件進行安裝完成

C#靜態類與非靜態類

1、靜態類 靜態類有幾個重要的特點&#xff1a; 1&#xff09;無法實例化&#xff1a;由于靜態類不能被實例化&#xff0c;因此它不會占用對象內存。 2&#xff09;靜態成員&#xff1a;靜態類只能包含靜態成員&#xff08;靜態方法、靜態屬性、靜態事件等&#xff09;。 3&am…

步進電機改伺服電機

步進電機&#xff1a; 42&#xff1a;軸徑5mm 57&#xff1a;軸徑8mm 86&#xff1a;軸徑14mm 【86CME120閉環】// 12牛米 伺服電機&#xff1a; 40&#xff1a; 60&#xff1a; 80&#xff1a; 86&#xff1a; ECMA——C 1 0910 R S 4.25A 軸徑…

評價ChatGPT與強人工智能的未來

在人工智能領域&#xff0c;ChatGPT的出現無疑是一個里程碑事件。它不僅展示了自然語言處理技術的巨大進步&#xff0c;也引發了人們對于強人工智能&#xff08;AGI&#xff09;的無限遐想。本文將從多個角度評價ChatGPT&#xff0c;并探討強人工智能距離我們還有多遠。 ChatGP…

虛擬地址和物理地址

到底什么是虛擬地址呢&#xff1f;它和物理地址的區別又在哪呢&#xff1f; 一. 虛擬地址的作用 1. 使代碼的移植性更好&#xff0c;在不同平臺進行編譯以后&#xff0c;就可以直接運行&#xff0c;因為到別的系統&#xff0c;會將你的虛擬地址轉換為物理地址&#xff0c;而使…

無人機運營合格證及無人機駕駛員合格證(AOPA)技術詳解

無人機運營合格證及無人機駕駛員合格證&#xff08;AOPA&#xff09;技術詳解如下&#xff1a; 一、無人機運營合格證 無人機運營合格證是無人機運營企業或個人必須獲得的證書&#xff0c;以確保無人機在運營過程中符合相關法規和標準。對于無人機運營合格證的具體要求和申請…