文章目录
双指针
Easy
283.零移动
题目描述
思路
遍历数组,将数组中的非零元素全部前移,如:[1,0,2,0,3,0,4,0]变为[1,2,3,4,x,x,x,x],最后将数组的后count
位用0填充。
实现方法
双指针:i
用于循环遍历数组,lastNumberNotZero
表示数组中已填充的最后一位。
零元素计数器:count
。
若a[i] == 0
则count++
。否则则将该非零元素移动至nums[++lastNumberNotZero]
。
代码
class Solution {
public void moveZeroes(int[] nums) {
int lastNumberNotZero = -1;
int count = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0){
nums[++lastNumberNotZero] = nums[i];
}else {
count++;
}
}
for(int i = nums.length-count; i < nums.length; i++){
nums[i] = 0;
}
}
}
26.删除排序数组中的重复项
141. (判断)环形链表
思路
- 使用两个指针
fast
和slow
- 每次循环前判断
fast.next
和fast.next.next
是否等于null
- 若等于有其一等于
null
则表示,链表不循环
- 若等于有其一等于
- 若链表成环,则
fast
与slow
必回相遇
代码
public class Solution {
public boolean hasCycle(ListNode head) {
if (head == null){
return false;
}
ListNode fast = head, slow = head;
do{
if (fast.next == null || fast.next.next == null){
return false;
}
slow = slow.next;
fast = fast.next.next;
}while (slow != fast);
return true;
}
}