[LeetCode] 300. 最长上升子序列
用一个栈去存储,从头开始遍历,若遇到比自己大的就放到栈中。
package leetcode; import java.util.Stack; /** * @author doyinana * @create 2020-07-22 9:57 */ public class L300 { public int lengthOfLIS(int[] nums) { Stack<Integer> stack = new Stack<>(); int maxLen=0; for(int i=0;i<nums.length;i++){ stack.push(nums[i]); int n=1; for(int j=i;j<nums.length;j++){ if(nums[j]>stack.peek()){ stack.push(nums[j]); n +=1; } } maxLen=Math.max(maxLen,n); } return maxLen; } }
代码有误。。。。。
可以用动态规划去做,一开始也有想到用一个dp[]去存储,本来觉得有问题得,但是好像也可以这样做
package leetcode; import java.util.Arrays; import java.util.Stack; /** * @author doyinana * @create 2020-07-22 9:57 */ public class L300 { public int lengthOfLIS(int[] nums) { if(nums.length==0) return 0; int[] dp = new int[nums.length]; int res=0; Arrays.fill(dp,1); for(int i=0;i<nums.length;i++){ for(int j=0;j<i;j++){ if(nums[j]<nums[i]) dp[i]=Math.max(dp[i],dp[j]+1); } res=Math.max(res,dp[i]); } return res; } }
方法二:
还需要考虑 !!二分法!