增加网站产品WordPress自定义图床
增加网站产品,WordPress自定义图床,wordpress4.7添加菜单,一个完整的营销策划案范文每天学习一点算法 2026/03/03
题目#xff1a;递增的三元子序列 给你一个整数数组 nums #xff0c;判断这个数组中是否存在长度为 3 的递增子序列。 如果存在这样的三元组下标 (i, j, k) 且满足 i j k #xff0c;使得 nums[i] nums[j] nums[k] …每天学习一点算法 2026/03/03题目递增的三元子序列给你一个整数数组 nums 判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i j k 使得 nums[i] nums[j] nums[k] 返回 true 否则返回 false 。作者LeetCode链接https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvvuqg/来源力扣LeetCode著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。我们可以遍历数组查看左边变是否有小于自己的数以及右边是否有大于自己的数。functionincreasingTriplet(nums:number[]):boolean{for(leti1;inums.length-1;i){if(findLeft(i)findRight(i))returntrue}returnfalsefunctionfindLeft(index:number):boolean{returnMath.min(...nums.slice(0,index1))nums[index]}functionfindRight(index:number):boolean{returnMath.max(...nums.slice(index))nums[index]}};这个方法很容易想到但是遇到较长的测试用例就会超时。我们换一个思路我们先维护两个数组leftMin和rightMax分别记录nums每个下标左侧范围最小数和右侧范围内最大的数这样我们左右查找的循环操作只用做一次后续遍历数组比较元素两侧最小值即可。functionincreasingTriplet(nums:number[]):boolean{constnnums.length;if(n3){returnfalse;}constleftMinnewArray(n).fill(0);leftMin[0]nums[0]for(leti1;in;i){leftMin[i]Math.min(nums[i],leftMin[i-1])}constrightMaxnewArray(n).fill(0);rightMax[n-1]nums[n-1]for(letin-2;i0;i--){rightMax[i]Math.max(nums[i],rightMax[i1])}for(leti1;in-1;i){if(nums[i]leftMin[i-1]nums[i]rightMax[i1])returntrue}returnfalse};贪心算法我们可以维护两个变量first和second表示三元序列的第一个数和第二个数遍历过程我们使first和second始终保持最小这样就可以找出三元序列了。设定first和second初始值first nums[0]second Infinity我们在遍历的过程中会遇到三种情况first nums[i] second时需要替换second为nums[i]。nums[i] first时需要替换first为nums[i]。nums[i] second时我们就找到了第三个数。functionincreasingTriplet(nums:number[]):boolean{constnnums.length;if(n3){returnfalse;}letfirstnums[0]letsecondInfinityfor(leti1;in;i){if(nums[i]second){returntrue}elseif(nums[i]first){secondnums[i]}else{firstnums[i]}}returnfalse};题目来源力扣LeetCode