leecode雙指針部分題目

leecode雙指針部分題目

  • 1. 驗證回文串
  • 2. 判斷子序列
  • 3. 兩數之和 II - 輸入有序數組
  • 4. 盛最多水的容器
  • 5. 三數之和

1. 驗證回文串

如果在將所有大寫字符轉換為小寫字符、并移除所有非字母數字字符之后,短語正著讀和反著讀都一樣。則可以認為該短語是一個 回文串 。

字母和數字都屬于字母數字字符。

給你一個字符串 s,如果它是 回文串 ,返回 true ;否則,返回 false 。
在這里插入圖片描述
解題思路: 遍歷字符串,判斷是否為字母或數字,使用Character.isLetterOrDigit(),如果是則放入StringBuilder中。
保存一個原本的字符串和反轉后的字符串,判斷是否相同。

class Solution {public boolean isPalindrome(String s) {StringBuilder re = new StringBuilder();// 過濾字符并標準化為小寫for (char c : s.toCharArray()) {if (Character.isLetterOrDigit(c)) { // 只考慮字母和數字re.append(Character.toLowerCase(c)); // 轉為小寫并添加到 StringBuilder}}// 保存過濾后的字符串String filteredString = re.toString(); // 不翻轉// 生成逆置字符串String rev = re.reverse().toString(); // 反轉System.out.println("Filtered String: " + filteredString);System.out.println("Reversed String: " + rev);// 比較原始過濾的字符串和反轉字符串是否相等return filteredString.equals(rev);
}
}

2. 判斷子序列

給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。

字符串的一個子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對位置形成的新字符串。(例如,"ace"是"abcde"的一個子序列,而"aec"不是)。

在這里插入圖片描述
解題思路: 同時遍歷這兩個字符串,如果相等則i++,j++,如果不相等則只讓i++,最后返回i是否超過它本身長度,如果超過則true,如果沒有則false。

class Solution {public boolean isSubsequence(String s, String t) {int i = 0;int j = 0;char[] ss = s.toCharArray();char[] ts = t. toCharArray();while(i < ss.length && j < ts.length){if(ss[i] != ts[j]){j++;}else{i++;j++;}}return i == ss.length ;}
}

3. 兩數之和 II - 輸入有序數組

給你一個下標從 1 開始的整數數組 numbers ,該數組已按 非遞減順序排列 ,請你從數組中找出滿足相加之和等于目標數 target 的兩個數。如果設這兩個數分別是 numbers[index1] 和 numbers[index2] ,則 1 <= index1 < index2 <= numbers.length 。

以長度為 2 的整數數組 [index1, index2] 的形式返回這兩個整數的下標 index1 和 index2。

你可以假設每個輸入 只對應唯一的答案 ,而且你 不可以 重復使用相同的元素。

你所設計的解決方案必須只使用常量級的額外空間。
在這里插入圖片描述
解題思路: 使用和二分查找相似的思路,設置low等于0,high等于len-1,只要low <high,則讓sum = num[low] + num [high],如果sum<target,則說明需要low++,如果大于則說明需要high–,如果相等則返回索引值加一,如果都遍歷完都沒找到結果則直接返回【-1,-1】

class Solution {public int[] twoSum(int[] numbers, int target) {int low = 0, high = numbers.length - 1;while (low < high) {int sum = numbers[low] + numbers[high];if (sum == target) {return new int[]{low + 1, high + 1};} else if (sum < target) {++low;} else {--high;}}return new int[]{-1, -1};}
}

4. 盛最多水的容器

給定一個長度為 n 的整數數組 height 。有 n 條垂線,第 i 條線的兩個端點是 (i, 0) 和 (i, height[i]) 。

找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。

返回容器可以儲存的最大水量。

說明:你不能傾斜容器。
在這里插入圖片描述

解題思路: 設置l 和 r,一個在最左邊,一個在最右邊,只要l<r,則執行,首先計算面積area = min(l,r) * (r - l), 用 ans = max(ans,area),如果l的高度小于等于r的高度,則l++,如果大于則r–,以此找出最大面積。

public class Solution {public int maxArea(int[] height) {int l = 0, r = height.length - 1;int ans = 0;while (l < r) {int area = Math.min(height[l], height[r]) * (r - l);ans = Math.max(ans, area);if (height[l] <= height[r]) {++l;}else {--r;}}return ans;}
}

5. 三數之和

給你一個整數數組 nums ,判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i != j、i != k 且 j != k ,同時還滿足 nums[i] + nums[j] + nums[k] == 0 。請你返回所有和為 0 且不重復的三元組。
在這里插入圖片描述
解題思路: 首先數組排序,用i遍歷數組,L = i+1,R= len - 1,如果num[i]大于0,則說明最小的大于0,直接返回,如果num[i] == num[i+1] 則繼續執行,去重。
再循環內使用雙指針,只要L<R,就執行,讓sum = num[i] + num[L] + num[R],如果等于0,則把這三個數放入列表中存下,給L和R去重,讓L和R取到新值。
如果sum>0,則R–;
如果sum<0,則L++;
如此遍歷得到最終答案。

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> res = new ArrayList<List<Integer>>();int len = nums.length;if(len < 3 || nums == null) return res;Arrays.sort(nums);for(int i = 0; i < len; i++){int L = i + 1;int R = len - 1;if(nums[i] > 0) break;if(i>0 && nums[i] == nums[i-1]){continue;}while(L < R){int sum = nums[i] + nums[L] + nums[R];if(sum == 0){res.add(Arrays.asList(nums[i],nums[L],nums[R]));while(L<R&&nums[L] == nums[L+1]) L++;while(L<R && nums[R] == nums[R-1]) R--;L++;R--;}else if(sum > 0) R--;else if(sum < 0) L++;} }return res;
}}

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

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

相關文章

Web 應用如何使用sqlite?使用 sql.js 實現前端 SQLite 數據庫操作

前言 在 Web 應用開發中&#xff0c;前端數據處理的重要性日益增加。為了實現更高效的前端數據管理&#xff0c;特別是在處理結構化數據時&#xff0c;sql.js 提供了一個出色的解決方案。sql.js 是將 SQLite 數據庫編譯為 JavaScript 的庫&#xff0c;允許開發者在瀏覽器環境中…

docker 安裝 mysql8.0容器外無法連接

文章目錄 概要問題描述解決方案其他命令 概要 主要是mysql5.7和mysql8.0的兼容性問題。 排查了很久 其實就是配置文件的一句話的事情 感覺mysql8.0更為嚴謹 這樣可能是考慮杜絕一些漏洞吧 問題描述 在容器內 netstat -an | grep 3306 都不行 在容器外 netstat -an | grep 2…

TCP協議簡單分析和握手揮手過程

TCP介紹 TCP是可靠的傳輸層協議&#xff0c;建立連接之前會經歷3次握手的階段。 確認機制&#xff1a;接受方 收到數據之后會向 發送方 回復ACK重傳機制&#xff1a;發送方 在一定時間內沒有收到 接收方的ACK就會重新發送 握手目的&#xff1a;與端口建立連接 TCP的三次握手 …

VisualStudio vsix插件自動加載

本文介紹如何在Visual Studio擴展中實現PackageRegistration&#xff0c;包括設置UseManagedResourcesOnly為true&#xff0c;允許背景加載&#xff0c;并針對C#、VB、F#項目提供自動裝載&#xff0c;附官方文檔鏈接。增加以下特性即可…… [PackageRegistration(UseManagedRe…

opencv所有常見函數

一、opencv圖像操作 二、opencv圖像的數值運算 三、opencv圖像的放射變換 四、opencv空間域圖像濾波 五、圖像灰度化與直方圖 六、形態學圖像處理 七、閾值處理與邊緣檢測 八、輪廓和模式匹配

【Excel】單元格分列

目錄 分列&#xff08;新手友好&#xff09; 1. 選中需要分列的單元格后&#xff0c;選擇 【數據】選項卡下的【分列】功能。 2. 按照分列向導提示選擇適合的分列方式。 3. 分好就是這個樣子 智能分列&#xff08;進階&#xff09; 高級分列 Tips&#xff1a; 新手推薦基…

【STM32練習】基于STM32的PM2.5環境監測系統

一.項目背景 最近為了完成老師交付的任務&#xff0c;遂重制了一下小項目用STM32做一個小型的環境監測系統。 項目整體示意框圖如下&#xff1a; 二.器件選擇 單片機&#xff08;STM32F103&#xff09;數字溫濕度模塊&#xff08;DHT11&#xff09;液晶顯示模塊&#xff08;0.8…

《開源數據:開啟信息共享與創新的寶藏之門》

《開源數據&#xff1a;開啟信息共享與創新的寶藏之門》 一、開源數據概述&#xff08;一&#xff09;開源數據的定義&#xff08;二&#xff09;開源數據的發展歷程 二、開源數據的優勢&#xff08;一&#xff09;成本效益優勢&#xff08;二&#xff09;靈活性與可定制性&…

ReactPress最佳實踐—搭建導航網站實戰

Github項目地址&#xff1a;https://github.com/fecommunity/easy-blog 歡迎Star。 近期&#xff0c;阮一峰在科技愛好者周刊第 325 期中推薦了一款開源工具——ReactPress&#xff0c;ReactPress一個基于 Next.js 的博客和 CMS 系統&#xff0c;可查看 demo站點。&#xff08;…

2024,大模型殺進“決賽圈”

Henry Chesbrough在著作《通過技術創新盈利勢在必行》中&#xff0c;曾提出過一個創新的“漏斗模型”。開放式創新一開始鼓勵百花齊放&#xff0c;但最終只有10%的技術能夠通過這個漏斗&#xff0c;成功抵達目標市場target market&#xff0c;進入到商業化與產業化的下一個階段…

STM8單片機學習筆記·GPIO的片上外設寄存器

目錄 前言 IC基本定義 三極管基礎知識 單片機引腳電路作用 STM8GPIO工作模式 GPIO外設寄存器 寄存器含義用法 CR1&#xff1a;Control Register 1 CR2&#xff1a;Control Register 2 ODR&#xff1a;Output Data Register IDR&#xff1a;Input Data Register 賦值…

頁面加載速度優化策略:提升用戶體驗的關鍵

文章目錄 前言一、為什么需要優化頁面加載速度&#xff1f;二、前端優化技術三、后端優化策略四、構建與部署優化五、案例研究&#xff1a;實際效果展示結語 前言 在當今快節奏的互聯網環境中&#xff0c;頁面加載速度不僅是用戶體驗的重要組成部分&#xff0c;更是影響網站性…

【CSS in Depth 2 精譯_081】 13.1:CSS 漸變效果(下)——CSS 徑向漸變(13.1.3)+ CSS 錐形漸變(13.1.4)

當前內容所在位置&#xff08;可進入專欄查看其他譯好的章節內容&#xff09; 第四部分 視覺增強技術 ??【第 13 章 漸變、陰影與混合模式】 ?? 13.1 漸變 ?? 13.1.1 使用多個顏色節點&#xff08;上&#xff09;13.1.2 顏色插值方法&#xff08;中&#xff09;13.1.3 徑…

商務禮儀學習筆記

時間,場合,地點 女士: 1. 著裝(裙裝套裝,最短不能超過膝蓋一拳,裙子形狀直通,顏色簡單不能花里胡哨,上下顏色不能超過三種,深灰深藍;上下顏色,裝飾,面料統一;絲襪不要過于花,肉色透明比較推薦) 2. 妝容和發型(經過搭理,不要毛躁; 膚色保持一致,均衡;腮紅…

ubuntu 用 ss-tproxy的最終網絡結構

1、包含了AD廣告域名篩選 2、Ss-tproxy 國內國外地址分類 3、chinadns-ng解析 4、透明網關 更多細節看之前博客 ubuntu 用ss-TPROXY實現透明代理&#xff0c;基于TPROXY的透明TCP/UDP代理,在 Linux 2.6.28 后進入官方內核。ubuntu 用 ss-tproxy的內置 DNS 前掛上 AdGuardHome…

iOS swift開發系列--如何給swiftui內容視圖添加背景圖片顯示

我需要在swiftui項目中顯示背景圖&#xff0c;有兩種方式&#xff0c;一種是把圖片拖入asset資源中&#xff0c;另外一種是直接把圖片放在源碼目錄下。采用第一種方式&#xff0c;直接把圖片拖到資源目錄&#xff0c;但是swiftui項目沒有彈出&#xff0c; “Copy items if need…

BUUCTF Pwn [HarekazeCTF2019]baby_rop2 題解

下載 得到兩個文件 checksec 64位 拖入IDA64 查看main函數 看到給了個libc說明這題是ret2libc題 這里的打印函數是printf 所以利用printf函數的plt輸出真實地址got 但printf的got好像不行 所以換成了read的got 因為這是64位程序 所以用寄存器傳參&#xff1b;又因為printf得…

語音識別失敗 chrome下獲取瀏覽器錄音功能,因為安全性問題,需要在localhost或127.0.0.1或https下才能獲取權限

環境&#xff1a; Win10專業版 谷歌瀏覽器 版本 131.0.6778.140&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; 問題描述&#xff1a; 局域網web語音識別出現識別失敗 chrome控制臺出現下獲取瀏覽器錄音功能&#xff0c;因為安全性問題&#xff0c;需要在…

【前端知識】Javascript進階-類和繼承

文章目錄 概述一、類&#xff08;Class&#xff09;二、繼承&#xff08;Inheritance&#xff09; 三、繼承的實現方式作用一、類和作用二、繼承和作用 概述 當然可以&#xff0c;以下是對JavaScript中類和繼承的詳細介紹&#xff1a; 一、類&#xff08;Class&#xff09; 定…

前端搭建企業級項目的具體步驟?

?前端搭建企業級項目的具體步驟如下?&#xff1a; ?確定項目技術棧和規劃項目結構?&#xff1a;首先&#xff0c;確定使用的前端框架&#xff0c;如Vue.js&#xff0c;并規劃項目的目錄結構&#xff0c;包括src、components、routes、store等?。 ?準備開發環境?&#x…