Lis算法
软件园里卖煎饼
以文载意,以理铸心
展开
-
每日一题.1713. 得到子序列的最少操作次数
解题思路 讲arr中的值修改成target中对于数字的下标 例如target = [6,4,8,1,3,2], arr = [4,7,6,2,3,8,6,1] 0,1,2,3,4,5 1,0,5,4,2,0,3 然后找出1,0,5,4,2,0,3中的最长上升子序即可 代码 class Solution { public int minOperations(int[] target, int[] arr) { /* 我们可以用一个哈希表记录ta原创 2021-07-26 11:03:09 · 72 阅读 · 0 评论 -
关于Lis算法的一点个人见解与模板
今天的每日一题让我想到了Lis算法,最初看别人的讲解并没有看明白,最后是自己想通了,所以记录一下。 Lis实际上就是一个不断更新的数组 其数值代表的就是这个数左边的最长上升子序的长度 既然代表的是左边的最长上升子序长度,那么我们从第二个数字开始不断更新这个数组的值,那么最终其中的每个数字左边的最长上升子序长度就都可以得出,其基本代码如下,也可以作为一个模板来使用,只需要修改flag就可以了 int[] Lis = new int[n]; int[] flag = new in原创 2021-03-04 10:52:54 · 177 阅读 · 1 评论 -
每日一题:354. 俄罗斯套娃信封问题
解题思路 刚看到这题时我也是一脸懵逼 但是看了下大神给出的题解后便豁然开朗了 总体思路分为两步 一.对原始的数据按照w升序的基础上w降序的方式进行排序 envelopes[w][h] 例如对[[5,4],[6,4],[6,7],[2,3]]排序后 结果为[2, 3][5, 4][6, 7][6, 4] 这样做的目的是保证了W处于上升序列的同时 如果两个信封宽度相同 我们选择到H大的那一个 二.根据已经排好序的数组 根据H来找到最长上升子序长度 我也是刚刚学会Lis的算法 通俗来讲基本如下: 维护一个Lis数原创 2021-03-04 10:39:47 · 100 阅读 · 1 评论