第一天
题目
对题目的想法
没有特别多的想法,因为之前已经看过一遍。
实现中/后的感想
- 在二分法或者类似的双指针应用中,感觉 (left <= right) 更为舒服。
- 唯一的卡顿是移除元素中的返回值问题。一上来就尝试双指针方法,最后返回值稍微花了点时间。原因在于要看清题目条件,是要返回index还是返回一个长度。
看完代码随想录之后的想法
关于移除元素,这是本猪的双指针法。左指针和右指针分别从两端相对移动,当左指针等于val并且右指针不等于val时交换两个位置的值。
class Solution {
public int removeElement(int[] nums, int val) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
if (nums[left] != val) {
left++;
}
else if (nums[right] == val) {
right--;
}
else {
nums[left] = nums[right];
nums[right] = val;
left++;
right--;
}
}
return left;
}
}
不过看到随想录的解法发现更为简洁,不过这种优雅程度的代码本猪显然还无法掌控,先尽力看懂即可。
杂项
万事开头难。
深刻认识到本猪的自律能力远远不够,希望借此机会认真磨练编程技术(并培养一些写作习惯,至少消除写作的恐惧,写作实在是非常痛苦,然而又无法逃避写作)。从某种意义上来说写作习惯可能对于本猪更为急迫,尤其是这两天被迫写一份无法推脱的文字材料。