打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【leetcode 300】最长上升子序列 O(nlogn)解法
class Solution { //最长递增子序列 O(nlogn) 的解法 public int lengthOfLIS(int[] nums) { if(nums.length<=1) return nums.length; int[] minend = new int[nums.length+1]; //minend[i] 表示 长度为i的递增子序列的 末尾元素最小的值 int len = 0; //len指向minend的最后一个元素 minend[1] = nums[0]; len++; for(int i=1;i<nums.length;++i){ if(nums[i]>minend[len]) //说明 nums[i]的加入使得 现阶段的最长递增子序列的长度又向后扩展了一位 minend[++len] = nums[i]; else{ int pos = findFirstBiggerNum(minend,1,len,nums[i]); //查找minend中第一个等于或者大于nums[i]的数据的位置 并更新它 minend[pos] = nums[i]; } } return len; } //二分查找的递归实现 private int findFirstBiggerNum(int[] arr, int start, int end, int target) { if(start>=end){ if(arr[start]>=target) return start; else //必须保证arr[end] > target 才不会走到这条分支返回越界的值 return start+1; } int mid = (start+end)/2; if(arr[mid]<target) return findFirstBiggerNum(arr,mid+1,end,target); else if(arr[mid]==target) return mid; else return findFirstBiggerNum(arr,start,mid,target); }} 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
leetcode 315. Count of Smaller Numbers After Self 两种思路(欢迎探讨更优解法)
位运算中异或的常见用法总结
最长上升子序列(LIS)长度的O(nlogn)算法
排序算法总结
最长递增子序列 O(NlogN)算法
leetcode 数组 (python)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服