复盘|第111场双周赛
统计和小于目标的下标对数目
【排序 + 双指针】初始化左右指针l = 0, r = n - 1。排序后,如果nums[l] + nums[r] ≥ target, r --;如果nums[l] + nums[r] < target说明nums[l]与nums[l + 1: r]中任何相加都<target,找到r- l个数对。
循环增长使字符串子序列等于另一个字符串
【双指针】同向双指针i, j遍历str1和str2,如能匹配则i++;j++,否则i++。最后j是否移动到了str2的末尾。
将三个组排序
【DP】找到最长非递减子序列(LIS)的长度记为m,n-m即为使nums变为美丽数组的最少步数。
范围中美丽整数的数目
【数位DP】定义f(i, val, diff, isLimit, isNum)为构造第i位及其之后数位的合法方案数,其中:已经构造的数位,模k等于val,在第i位填入数字d后,将val更新为(val 10 + d) mod k,在递归终点判断val是否为0;diff表示奇数数位的数目与偶数数位的数目的差,在递归终点判断是否满足diff = 0,设填入数字为d,diff += (d mod 2) 2 - 1,对应奇数加一、偶数减一。