算法汇总
以下是所有算法汇总,包括GitHub源码地址链接:力扣算法练习汇总(持续更新…)
题目
思路
双指针法(快慢指针法): 通过一个快指针
和慢指针
在一个for循环下完成两个for循环的工作。
删除过程如下:
双指针法(快慢指针法) 在数组和链表的操作中是非常常见的,很多考察数组、链表、字符串等操作的面试题,都使用双指针法。
代码
1.快慢指针
数组【3,3,2,2】,移除3:
class Solution {
/**
* 采用双指针法:快慢指针
* @param nums 数组
* @param val 查找值
* @return 长度
*/
private static int solution(int[] nums, int val) {
if(nums.length <= 0){
return 0;
}
// 初始化时候,fastIndex == slowIndex
int fastIndex = 0;
int slowIndex = 0;
// 遍历数组
for(int i = 0; i < nums.length; i++){
// 快指针是否和目标值相同。联想这个例子:数组【3,3,2,2】,移除3。
if(nums[fastIndex] == val){
fastIndex++;
}else {
nums[slowIndex] = nums[fastIndex];
fastIndex++;
slowIndex++;
}
}
// 如果nums = [3,3,2,2] , 那么移除后是:[2, 2, 2, 2]
// System.out.println(Arrays.toString(nums)); // [2, 2, 2, 2]
return slowIndex;
}
}
2.解题方法,如暴力法