当前位置: 首页 > news >正文

领先的手机网站设计智能建站网站模板

领先的手机网站设计,智能建站网站模板,教做面点的网站,软件开发的三个阶段动态规划,二分查找。 题目 由题,从数组中找一个最长子序列,不难想到,当这个子序列递增子序列的数越接近时是越容易拉长的。从dp上看,当遍历到这个数,会从前面的dp选一个最大的数加上当前数,注意…

动态规划,二分查找。

题目

由题,从数组中找一个最长子序列,不难想到,当这个子序列递增子序列的数越接近时是越容易拉长的。从dp上看,当遍历到这个数,会从前面的dp选一个最大的数加上当前数,注意这里的dp是每遍历到一个数都会加进去。而这里的dp数组同样是用来维护到某个数时的ans,nums数组是做了比较的,因此也有可能内循环时数组中的一些数是没有做更新的,因此最后一步肯定是加上当前的数后再进行一次与更新的dp比较进行选最大。

时间复杂度:O(n^2),空间复杂度:O(n)。

class Solution {public int lengthOfLIS(int[] nums) {int n = nums.length, ans = 0;int[] f = new int[n];for (int i = 0; i < n; i++) {for (int j = 0; j < i; j++) {if (nums[j] < nums[i]) {f[i] = Math.max(f[i], f[j]);}}f[i]++;ans = Math.max(ans, f[i]);}return ans;}
}

接着是更快的,用二分查找的方法,在用二分时用mid去找目标值。而这里每遍历到数组的一个数时,同样可以与tails的数去做比较,注意如果遍历到的数与dp的数做比较时mid在大的一边没有移动过,说明这个数就是大的可以追加到原数组的尾巴,即有位置可以插入。

时间复杂度:O(nlogn),空间复杂度:O(n)。

class Solution {public int lengthOfLIS(int[] nums) {int[] tails = new int[nums.length];int res = 0;for(int num : nums) {int i = 0, j = res-1;//标准二分,当左右指针重叠时再进行一次比较while(i <= j) {int m = (i + j) / 2;if(tails[m] < num) i = m + 1;else j = m - 1;}//这里的i就是目标值tails[i] = num;//更新这个位置的值if(res == i) res++;//说明可以进行扩充//注意每次找到时res肯定会比i多一,因为res从一开始的}return res;}
}

很典型的一道例题,可以用dp的状态维护,找到前面的状态,不过每到一个数都要dp两次。而二分查找目标值的方法,刚好让比目标值小的存到tails数组,比tails数组大的直接追加,以此来更新最长递增子序列。

http://www.ds6.com.cn/news/74406.html

相关文章:

  • 广州做网站基本流程佛山百度网站快速排名
  • 浙江疫情最新消息中高风险地区廊坊网站排名优化公司哪家好
  • 用手机制作宣传单的appseo服务外包客服
  • 有没有日本人教做料理的网站有域名有服务器怎么做网站
  • 做dm素材网站黄页推广2021
  • 上海工厂网站建设如何自己创建一个网站
  • 网站模板怎么引用网站模板购买
  • 常州网站建设公司哪个好廊坊seo网络推广
  • 聊城 网站建设营销软件站
  • 装饰装修网站模板建设新东方在线教育平台官网
  • 网站开发职业足球队世界排名榜
  • 博物馆网站建设目的深圳网站优化平台
  • 全运网站的建设公司官网制作多少钱
  • 河间做网站价格平台推广怎么做
  • 农村致富小型加工厂深圳网站快速排名优化
  • 制作一个网站的流程恶意点击竞价是用的什么软件
  • wordpress注册logo重庆百度快照优化排名
  • 免费做淘客cms网站爱站网站seo查询工具
  • 建设网站设备预算镇江百度推广
  • 源码网站git佛山优化推广
  • ai人工智能写代码seo编辑培训
  • 电商兼职网站开发网络服务器的作用
  • 北京景观设计公司10强郴州seo快速排名
  • 网站备案没有了中国疫情今天最新消息
  • 统一汤达人选择她做汤面活动网站公司网站建设服务机构
  • 邯郸个人做网站杭州seo排名
  • 阜宁做网站的公司电话网站建站教程
  • 自助建站的平台推广软文代发
  • 关于网站建设的英文歌2345网址导航设为主页
  • 上海知名的网站建设怎么自己开网站