算法專題一:雙指針

1.移動零

題目鏈接:283. 移動零 - 力扣(LeetCode)

我們可以定義一個dest,一個cur,dest表示數組中不為零的數的最后一位,cur用來遍歷數組

class Solution {public void moveZeroes(int[] nums) {for(int cur=0,dest=-1;cur<nums.length;cur++){if(nums[cur]!=0){dest++;int tem=nums[dest];nums[dest]=nums[cur];nums[cur]=tem;}}}
}

?

2.復寫零

題目鏈接:1089. 復寫零 - 力扣(LeetCode)

按正序的方式,判斷cur是否為0,如果不是cur++,dest++,如果為0,dest+=2,并且dest經過的兩位都賦值為0,會導致后面的數被覆蓋,所以我們需要換一種方法。

我們可以先找到最后一個復寫的數

先判斷cur位置的值,來決定dest走一步還是兩步,然后根據dest的位置來判斷是否為最后一位,不是dest最后一位,則cur++,如果dest為最后一位,那么cur現在的位置則是最后一個復寫的數。

但是我們發現這樣我們寫的代碼還是有問題

舉一個例子

此時dest指向的位置已經發生了越界

所以我們需要再加上一個判斷當cur(n-1)的位置為0,則cur--,dest-=2

最后我們只需要逆序進行復寫就可以了

代碼如下:

class Solution {public void duplicateZeros(int[] arr) {int cur=0;int dest=-1;int n=arr.length;while(cur<n){if(arr[cur]!=0){dest+=1;}else{dest+=2;}if(dest >= n - 1){break;}cur++;}if(dest==n){arr[n-1]=0;dest-=2;cur--;}while(cur>=0){if(arr[cur]!=0){arr[dest--]=arr[cur--];}else{arr[dest--]=0;arr[dest--]=0;cur--;}}}
}

?

3.快樂數?

題目鏈接:202. 快樂數 - 力扣(LeetCode)

?

所以我們的算法原理:可以定義一個快指針,一個慢指針,快指針每次走兩步,慢指針每次走一步,直至兩個指針相遇,如果相遇時的數為1,則是快樂數,如果不是1,就不是快樂數。?

代碼如下:

class Solution {public int sum(int n){int sum=0;while(n!=0){int t=n%10;sum+=t*t;n/=10;}return sum;}public boolean isHappy(int n) {int slow=n;int fast=sum(n);while(slow!=fast){slow=sum(slow);fast=sum(sum(fast));}return slow==1;}
}

4.盛最多水的容器?

題目鏈接:11. 盛最多水的容器 - 力扣(LeetCode)

大家看到這個題目一定會想到這道題的暴力解法,套兩層for循環,進行暴力枚舉,但是這種解法會超時。O(n2)

我們就要需要找到其中的規律

比如這種情況:

我們從中取出一小部分進行講解

體積無非就是長? *? 寬
我們通過左右的比較,發現6比3大,我們可以將3的位置往前移動一位。

這樣移動的思想就是,我們如果將6往前移動一位,無非就是三種情況

  1. 寬度減小,高度不變
  2. 寬度減小,高度也減小
  3. 寬度減小,高度不變

無論我們怎么樣移動體積都會減小,所以我們每次將兩邊較小的進行移動。

代碼如下:

class Solution {public int maxArea(int[] height) {int left=0;int right=height.length-1;int result=0;while(left < right){int v=Math.min(height[left],height[right]) * (right-left);result=Math.max(v,result);if(height[left]<height[right]){left++;}else{right--;}}return result;}
}

5.有效三角形的個數?

題目鏈接:611. 有效三角形的個數 - 力扣(LeetCode)

規律

class Solution {public int triangleNumber(int[] nums) {Arrays.sort(nums);int n=nums.length;int total=0;for(int i=n-1;i>=2;i--){int left=0;int right=i-1;while(left<right){if(nums[left] + nums[right]<=nums[i]){left++;}else{total+=right-left;right--;}}}return total; }
}

?

6.和為s的兩個數字?

題目鏈接:LCR 179. 查找總價格為目標值的兩個商品 - 力扣(LeetCode)

class Solution {public int[] twoSum(int[] price, int target) {int n=price.length;int left=0;int right=n-1;while(left<right){if(price[left]+price[right]<target){left++;}else if(price[left]+price[right]>target){right--;}else{return new int[]{price[left],price[right]};}}return new int[]{0};}
}

7.三數之和

題目鏈接:15. 三數之和 - 力扣(LeetCode)?

小優化:

class Solution {public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums);List<List<Integer>> ret =new ArrayList<>();int n=nums.length;for(int i=0;i<n;){int left=i+1;int right=n-1;int target=-nums[i];if(nums[i]>0){break;}while(left<right){int sum=nums[left]+nums[right];if(sum>target){right--;}else if(sum<target){left++;}else{ret.add(new ArrayList<Integer>(Arrays.asList(nums[i],nums[left],nums[right])));left++;right--;while(left<right && nums[left]==nums[left-1]){left++;}while(left<right && nums[right]==nums[right+1]){right--;}}}i++;while(i<n-1 && nums[i]==nums[i-1]){i++;}}return ret;}
}

8.四數之和

題目鏈接:?18. 四數之和 - 力扣(LeetCode)

這個題目跟上一個題目基本一致,唯一的差別就是需要外面在套一層循環,整體思路和思想都是一樣的。

注意:要把aim定義為long類型,否則會出現整數溢出的問題

class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> ret=new ArrayList<>();Arrays.sort(nums);int n=nums.length;for(int i=0;i<n;){for(int j=i+1;j<n;){int left=j+1;int right=n-1;long aim=(long)target-nums[i]-nums[j];while(left<right){int sum=nums[left]+nums[right];if(sum>aim){right--;}else if(sum<aim){left++;}else{ret.add(Arrays.asList(nums[i],nums[j],nums[left],nums[right]));left++;right--;while(left<right && nums[left]==nums[left-1]){left++;}while(left<right && nums[right]==nums[right+1]){right--;}}}j++;while(j<n && nums[j]==nums[j-1]){j++;}}i++;while(i<n && nums[i]==nums[i-1]){i++;}}return ret;}
}

希望能對大家有所幫助!!!?

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

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

相關文章

【大模型實戰】利用ms-swift微調框架對QwQ-32B推理模型進行微調

1. 背景介紹 之前我們在《大模型訓練/微調的一些經驗分享》、《利用DeepSeek-R1數據微調蒸餾ChatGLM32B讓大模型具備思考能力》中做了相關模型微調的介紹。目前在基座大模型能力還沒有達到足夠牛的情況下&#xff0c;大模型微調在商業化、垂直領域應用依然是不可或缺&#xff0…

【Unity3D】Addressables使用流程

Package Manager - 搜索 Addressables 安裝 Window -> Asset Management -> Addressables 打開窗口 New -> 新建Packed Assets 資源組 默認資源組Default xxx (Default) 將資源&#xff0c;如預制體直接拖拽進資源組 Build -> New Build -> Default Buil…

k8s serviceaccount在集群內指定apiserver時驗證錯誤的問題

在主機上&#xff0c;找到TOKEN&#xff0c;可以直接指定apiserver使用 rootubuntu-server:/home# kubectl auth can-i --list --server https://192.168.85.198:6443 --token"eyJhbGciOiJSUzI1NiIsImtpZCI6IlFlMHQ3TzhpcGw1SnRqbkYtOC1NUWlWNUpWdGo5SGRXeTBvZU9ib25iZD…

Linux驅動開發-①pinctrl 和 gpio 子系統②并發和競爭③內核定時器

Linux驅動開發-①pinctrl 和 gpio 子系統②并發和競爭③內核定時器 一&#xff0c;pinctrl 和 gpio 子系統1.pinctrl子系統2.GPIO子系統 二&#xff0c;并發和競爭1.原子操作2.自旋鎖3.信號量4.互斥體 三&#xff0c;按鍵實驗四&#xff0c;內核定時器1.關于定時器的有關概念1.…

數據庫的高階知識

目錄 一、case when二、幾種常見的嵌套查詢2.1 比較運算符2.2 ANY/ALL 關鍵詞2.3 in 關鍵詞2.4 EXISTS關鍵詞2.5 in和exists的異同點 三、開窗函數 數據庫的基本知識 數據庫的高階知識 一、case when 在實際工作中&#xff0c;經常會涉及以下兩類問題&#xff1a; 數據的映射…

【Kubernetes】Service 的類型有哪些?ClusterIP、NodePort 和 LoadBalancer 的區別?

在 Kubernetes 中&#xff0c;Service 是一種抽象的方式&#xff0c;用于將一組 Pod 進行連接并暴露給外部或集群內部訪問。它的主要目的是通過提供穩定的 IP 地址和端口來允許其他服務或客戶端與一組 Pod 進行通信。 Service 類型 Kubernetes 中 Service 有四種主要類型&…

MapReduce處理數據流程

&#xff08;一&#xff09;Shuffle MapReduce中的Shuffle過程指的是在Map方法執行后、Reduce方法執行前對數據進行分區排序的階段 &#xff08;二&#xff09;處理流程 1. 首先MapReduce會將處理的數據集劃分成多個split&#xff0c;split劃分是邏輯上進行劃分&#xff0c;…

OrioleDB: 新一代PostgreSQL存儲引擎

PostgreSQL 12 引入了可插拔式的表存儲方法接口&#xff0c;允許為不同的表選擇不同的存儲機制&#xff0c;例如用于 OLTP 操作的堆表&#xff08;HEAP、默認&#xff09;、用于 OLAP 操作的列式表&#xff08;Citus&#xff09;&#xff0c;以及用于超快速搜索處理的內存表。 …

電腦自動關機故障維修案例分享

電腦基本配置&#xff1a; C P U: AMD A10 9700 內存&#xff1a;8G 硬盤&#xff1a;金邦512G固態硬盤 主板&#xff1a;華碩 A320M-F 顯卡&#xff1a;集成&#xff08;核心顯卡&#xff09; 操作系統&#xff1a;Win10專業版 故障描述&#xff1a; 使用一段時間會黑屏…

JVM垃圾收集器相關面試題(1)

垃圾收集與內存管理摘要 一.核心垃圾收集算法對比 算法原理優點缺點適用場景標記-清除兩次遍歷&#xff08;標記存活對象→清除未標記對象&#xff09;實現簡單內存碎片化、雙遍歷效率低老年代&#xff08;結合整理&#xff09;標記-復制內存對半分&#xff0c;存活對象復制到…

棧(LIFO)算法題

1.刪除字符串中所有相鄰的重復字符 注意&#xff0c;我們需要重復處理&#xff0c;而不是處理一次相鄰的相同元素就結束了。對示例來說&#xff0c;如果只進行一次處理&#xff0c;結果為aaca&#xff0c;但是處理之后又出現了相鄰的重復元素&#xff0c;我們還得繼續處理&…

conda的基本使用及pycharm里設置conda環境

創建conda環境 conda create --name your_env_name python3.8 把your_env_name換成實際的conda環境名稱&#xff0c;python后邊的根據自己的需要&#xff0c;選擇python的版本。 激活conda環境 conda activate your_env_name 安裝相關的包、庫 conda install package_name …

Python基于深度學習的多模態人臉情緒識別研究與實現

一、系統架構設計 A[數據采集] --> B[預處理模塊] B --> C[特征提取] C --> D[多模態融合] D --> E[情緒分類] E --> F[系統部署] F --> G[用戶界面] 二、數據準備與處理 1. 數據收集 - 視頻數據&#xff1a;FER2013&#xff08;靜態圖像&#xff0…

synchronized與 Java內置鎖(未寫完)

文章目錄 一、 synchronized 關鍵字二、Java對象結構1. 對象頭2. 對象體3. 對齊字節4. 對象頭中的字段長度5. Mark Word 的結構信息6. 使用 JOL 工具查看對象的布局 三、Java 內置鎖機制3.1 內置鎖的演進過程1. 無鎖狀態2. 偏向鎖狀態3. 輕量級鎖狀態4. 重量級鎖狀態 一、 sync…

LLM(3): Transformer 架構

Transformer 架構是當前大語言模型的主力架構和基礎技術&#xff0c;本文以通俗易懂的方式&#xff0c;對此作簡要介紹。 1.4 介紹 Transformer 架構 大多數現代的大規模語言模型&#xff08;LLMs&#xff09;依賴于 Transformer 架構&#xff0c;這是一種在 2017 年的論文《…

11.【.NET 8 實戰--孢子記賬--從單體到微服務--轉向微服務】--微服務基礎工具與技術--Ocelot 網關--整合日志

網關作為微服務架構的入口&#xff0c;承載著各服務間的請求轉發與安全校驗&#xff0c;其日志信息尤為關鍵。通過整合網關日志&#xff0c;可以將分散在不同系統中的訪問記錄、錯誤提示和異常信息集中管理&#xff0c;為問題排查提供全景視角。在排查故障時&#xff0c;統一日…

88.HarmonyOS NEXT 性能監控與調試指南:構建高性能應用

溫馨提示&#xff1a;本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦&#xff01; HarmonyOS NEXT 性能監控與調試指南&#xff1a;構建高性能應用 文章目錄 HarmonyOS NEXT 性能監控與調試指南&#xff1a;構建高性能應用1. 性能監…

012---狀態機的基本知識

1. 摘要 文章為學習記錄。主要介紹狀態機概述、狀態轉移圖、狀態編碼、狀態機寫法、狀態機代碼示例。 2. 狀態機概述 狀態機 &#xff08;Finite State Machine&#xff09;&#xff0c;也稱為同步有限狀態機&#xff0c;用于描述有先后順序或時序規律的事情。 “同步”&…

deepseek+kimi做ppt教程記錄

1.首先注冊deepseek和kimi deepseek官網&#xff1a;https://chat.deepseek.com/ kimi官網&#xff1a;https://kimi.moonshot.cn/ 以下以一篇工作總結報告為例 2.使用deepseek生成ppt大綱 讓deepseek生成kimi生成ppt所需要的內容時&#xff0c;需要注意提示詞內容&#xff0c;…

Java Module介紹

Java模塊系統自Java 9開始引入&#xff0c;旨在提供更強大的封裝機制、清晰的依賴關系定義以及可靠的配置。Java平臺本身也被模塊化了&#xff0c;提供了多個核心模塊以及其他用于支持不同功能的模塊。以下是一些重要的Java標準模塊&#xff1a; java.base - 這是最基礎的模塊…