生活随笔
收集整理的這篇文章主要介紹了
双指针相关算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
一、使用雙指針的場景
1、第一個指針和第二個指針不同步的時候需要使用雙指針
2、分別使用雙指針指向頭和尾
二、雙指針的類型
?
1、數組使用雙指針
注:使用下標作為指針
給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。
示例:
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
class Solution {public void moveZeroes(int[] nums) {int j = 0;for(int i = 0; i< nums.length; i++){if(nums[i]!=0){nums[j++] = nums[i];}}for(int i = j; j < nums.length; j++){nums[j] = 0;}}
}
2、單鏈表使用雙指針
注:使用單鏈表的節點作為指針
例題:實現一種算法,找出單向鏈表中倒數第 k 個節點。返回該節點的值。
輸入: 1->2->3->4->5 和 k = 2
輸出: 4
class Solution {public int kthToLast(ListNode head, int k) {ListNode firstNode = head;ListNode secondNode = head;while(k-- > 0){firstNode = firstNode.next;}while(firstNode!=null){firstNode = firstNode.next;secondNode = secondNode.next;}return secondNode.val;}
}
?
總結
以上是生活随笔為你收集整理的双指针相关算法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。