目录
lc-15.三数之和 (时隔13天)
目前可通过,想法上无逻辑问题,一点细节小错误需注意即可
lc-283.移动零(时隔16天)
总结:观察案例直觉就是双指针遇零交换,两次实现都通过了,且思想与题解一致,但是时间复杂度较高,没有题解巧妙,代码实现的方式会影响到时间复杂度,需要想到一个巧妙的代码实现,才能使时间复杂度为O(n);
思路:一个指针从首位开始指向,如果遇到0停下,另一个指针则寻找不是0的,找到后二者进行交换即可,首位指针i走到头即可结束
分析:设置两个指针,其中一个指针可以用for循环i代表,另一个指针初始化一个变量即可。
寻找非零指针用for循环中的i代表则更好,条件结束时说明数组里面已经无非零元素了。
class Solution {
public void moveZeroes(int[] nums) {
if(nums==null) {
return;
}
//两个指针i和j
int j = 0;
for(int i=0;i<nums.length;i++) {
//当前元素!=0,就把其交换到左边,等于0的交换到右边
if(nums[i]!=0) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j++] = tmp;
}
}
}
}
lc-42.接雨水(0124 一遍过)
总结:可编写思路边实现代码,列出当前问题拆分成子问题解决。