本周的 LeetCode 题目为 334. 递增的三元子序列
给你一个整数数组 nums
,判断这个数组中是否存在长度为 3
的递增子序列。
如果存在这样的三元组下标 (i, j, k)
且满足 i < j < k
,使得 nums[i] < nums[j] < nums[k]
,返回 true
;否则,返回 false
。
输入:nums = [1,2,3,4,5]
输出:true
解释:任何 i < j < k 的三元组都满足题意
本题可以使用贪心法进行求解,先初始化最小值(minVal
)和第二最小值(secondVal
)都是 Integer.MAX_VALUE
。接下来进行遍历数组,当 nums[i]
小于 minVal
时,则将 minVal
更新为 nums[i]
;当 minVal < nums[i] < secondVal
时,则将 secondVal
更新为 nums[i]
;若 nums[i] > secondVal
,则说明存在符合题意要求的三元组。若数组遍历结束仍未出现 nums[i] > secondVal
的情况,则说明不存在符合要求的三元组。
class Solution {
public boolean increasingTriplet(int[] nums) {
int minVal = Integer.MAX_VALUE;
int secondMinVal = Integer.MAX_VALUE;
boolean ans = false;
for (int i = 0; i < nums.length; i++) {
if (nums[i] <= minVal) {
minVal = nums[i];
} else if (nums[i] <= secondMinVal) {
secondMinVal = nums[i];
} else {
ans = true;
break;
}
}
return ans;
}
}
Review
本周 Review 的英文文章为:为什么你应该编写糟糕的代码,且同时感觉良好
编写好的代码可以更好地适应未来的世界,但在软件中,我们很少知道未来的会怎样,通常不确定性由以下原因导致:
- 不懂技术
- 不懂业务
- 不了解用户
- 不清楚系统的数据大小
- 不知道代码的寿命
- 不知道的未知
程序员的长期价值是通过尽快学习创造,这也就是为什么需要编写更多糟糕的代码,下面是作者列举的一些原因:
- 培养编写代码的能力:如果你想学习如何编写代码,那么最好的方式就是去练习,通过练习,下一次将会变得更加容易并避免问题
- 重新获得创作的喜悦:编写糟糕的代码意味着专注于尽快获得结果,这意味着很容易获得成功和满足的感觉
- 了解代码和系统因何失败:失败是最宝贵的学习机会,当出现问题后,解决编写代码中的问题将会提高你的学习能力
- 了解如何调试:编写糟糕的代码时,将会给我更多机会尝试调试
- 探索设计空间:因为编写了糟糕的代码,让后续的重构设计有了更多的改进空间
- 降低期望会释放更多的创造力和思想
C/C++语言中 extern
除了指定声明外,当它和"C"
连用时,将告诉编译器按照 C语言的规则去解析,而不是C++的规则,例如 extern "C" void fun(int a, int b);
这样就可避免C++对fun函数的重载了。
周末因为临时的事情打乱了计划,没有来得及按时发布,只好今天来填坑。看来以后还是要多多提早准备,这样才能避免类似上周末的事情发生,抵抗未知的风险。