ARTS Week 29

Algorithm

本周的 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 的英文文章为:为什么你应该编写糟糕的代码,且同时感觉良好

编写好的代码可以更好地适应未来的世界,但在软件中,我们很少知道未来的会怎样,通常不确定性由以下原因导致:

  • 不懂技术
  • 不懂业务
  • 不了解用户
  • 不清楚系统的数据大小
  • 不知道代码的寿命
  • 不知道的未知

程序员的长期价值是通过尽快学习创造,这也就是为什么需要编写更多糟糕的代码,下面是作者列举的一些原因:

  1. 培养编写代码的能力:如果你想学习如何编写代码,那么最好的方式就是去练习,通过练习,下一次将会变得更加容易并避免问题
  2. 重新获得创作的喜悦:编写糟糕的代码意味着专注于尽快获得结果,这意味着很容易获得成功和满足的感觉
  3. 了解代码和系统因何失败:失败是最宝贵的学习机会,当出现问题后,解决编写代码中的问题将会提高你的学习能力
  4. 了解如何调试:编写糟糕的代码时,将会给我更多机会尝试调试
  5. 探索设计空间:因为编写了糟糕的代码,让后续的重构设计有了更多的改进空间
  6. 降低期望会释放更多的创造力和思想

Tip

C/C++语言中 extern 除了指定声明外,当它和"C"连用时,将告诉编译器按照 C语言的规则去解析,而不是C++的规则,例如 extern "C" void fun(int a, int b); 这样就可避免C++对fun函数的重载了。

Share

周末因为临时的事情打乱了计划,没有来得及按时发布,只好今天来填坑。看来以后还是要多多提早准备,这样才能避免类似上周末的事情发生,抵抗未知的风险。

posted @ 2022-03-15 16:29  永远是萌新的阿岩  阅读(23)  评论(0编辑  收藏  举报