[leetcode-300]Longest Increasing Subsequence(java)
来源:互联网 发布:树莓派centos扩展sd卡 编辑:程序博客网 时间:2024/05/16 06:02
问题描述:这里写链接内容
分析:这道题思路还是比较简单,它要求的是满足这样条件的序列的最大长度,nums[i]
//O(n2)复杂度public class Solution { public int lengthOfLIS(int[] nums) { int max = 0; if(nums.length <= 1) return nums.length; for(int i = 0;i<nums.length;i++){ int cur = nums[i]; int count = 0; int left = i-1,right = i+1; int leftVal = cur,rightVal = cur; //左移 while(left >= 0){ if(nums[left] < leftVal){ count++; leftVal = nums[left]; } left--; } //右移 while(right < nums.length){ if(nums[right] > rightVal){ count++; rightVal = nums[right]; } right++; } if(count > max) max = count; } return max+1; }}
//O(nlogn)public class Solution { public int lengthOfLIS(int[] nums) { if(nums.length <= 1) return nums.length; return binarySearch(nums,0,nums.length-1); } private int binarySearch(int[] nums,int left,int right){ if(left == right) return 1; if(right - left == 1){ if(nums[right] > nums[left]) return 2; else if(nums[right] == nums[left]) return 1; else return 0; } int mid = (left+right)/2; int leftlen = binarySearch(nums,left,mid); int rightlen = binarySearch(nums,mid,right); int count = 1; int leftVal = nums[mid],rightVal = nums[mid]; int leftIndex = mid-1; int rightIndex = mid+1; while(leftIndex >= 0){ if(nums[leftIndex] < leftVal){ count++; leftVal = nums[leftIndex]; } leftIndex--; } while(rightIndex < nums.length){ if(nums[rightIndex] > rightVal){ count++; rightVal = nums[rightIndex]; } rightIndex++; } int tmpMax = Math.max(leftlen,rightlen); return Math.max(tmpMax,count); }}
0 0
- [leetcode-300]Longest Increasing Subsequence(java)
- leetcode 300: Longest Increasing Subsequence
- leetcode 300 : Longest Increasing Subsequence
- 【LeetCode】300 Longest Increasing Subsequence
- LeetCode 300 Longest Increasing Subsequence
- [leetcode 300] Longest Increasing Subsequence
- LeetCode 300 Longest Increasing Subsequence
- leetcode 300 Longest Increasing Subsequence
- LeetCode 300: Longest Increasing Subsequence
- leetcode-300-Longest Increasing Subsequence
- [Leetcode] #300 Longest Increasing Subsequence
- [LeetCode.300]Longest Increasing Subsequence
- leetcode-300 Longest Increasing Subsequence
- Leetcode 300 Longest Increasing Subsequence
- [LeetCode]Longest Increasing Subsequence
- [LeetCode] Longest Increasing Subsequence
- leetcode-Longest Increasing Subsequence
- [LeetCode]Longest Increasing Subsequence
- 表单的各种属性
- HDOJ 5240 Exam(水)
- 【算法竞赛练习题】三角螺旋阵
- 术语(Terminology)
- C++函数返回局部变量指针的问题
- [leetcode-300]Longest Increasing Subsequence(java)
- 数据库表参数(了解)
- 读取二进制文件的中文乱码问题
- 【人工智能】遗传算法(GA)入门—以求解一元函数最大值的优化问题为例
- Java中关键字
- 浅谈机器学习中的QR分解
- hashCode与equals的区别与联系
- 高效敏感词过滤JAVA实现(DFA算法)
- 什么是KVC?(What Is Key-Value Coding?)