ダブルポインタ-スライドウィンドウ問題(Leetcode問題のjava実装)
10835 ワード
Leetcode141. チェーンテーブルにリングがあるかどうかを判断する
public class Solution {
// M, M , , 。
public boolean hasCycle(ListNode head) {
if (head == null || head.next == null)
return false;
ListNode slow = head;
ListNode fast = head;
while (fast == null || fast.next == null) {
// , 。
slow = slow.next;
fast = fast.next.next;
if (fast == slow) {
return true; }
}
return false;
}
}
Leetcode142. チェーンテーブルのループ入口を判断する
public ListNode detectCycle(ListNode head) {
if(head==null) return null;
ListNode slow = head;
ListNode fast = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
if (fast == slow) break;
}
fast = head; //
while(slow!=fast){
//
fast = fast.next;
slow = slow.next;
}
return slow;
}
Leetcode443.圧縮文字列
class Solution {
public int compress(char[] chars) {
public int compress(char[] chars) {
if(chars.length == 0) return 0;
int p=0; int left=0,right =1; // p ,
while(left<chars.length){
chars[p++] = chars[left];//p +1
while(right<chars.length && chars[left]==chars[right]){
right++; //
}
if(right-left >1){
String temp = String.valueOf(right-left);
for(char ch:temp.toCharArray()){
chars[p++] = ch;
}
}
left = right;
}
return p;
}
}