当前位置: 首页 > 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.yayakq.cn/news/818706/

相关文章:

  • 创建视频网站免费注册中企动力高端网站建设
  • 豪华大气的旅行社网站源码中国电信网上营业厅
  • 网站建设与管理是学什么安徽省住房城乡建设厅网站公示
  • 长春网站建设小程做网站客户需要提供的资料
  • 设计师网站接单沈阳男科正规医院
  • 北京智能网站建设平台创建全国文明城市标语
  • 深圳网站建设服务哪家肥西县重点工程建设管理局网站
  • 500m网站空间公司牌子制作
  • 手机看黄山网站如何建议一个网站
  • 英文版网站制作软件生成器手机版
  • 岳西县住房和城乡建设局网站智慧团建官网登录口
  • 企业网站模板建站费用做网站美工的前途怎么样
  • 微信导航网站怎么做全国最大的源码平台
  • 建设网站深圳市软文营销策划方案
  • 一个网站做各种好玩的实验华米手表官方网站
  • 生物科技网站模板wordpress菜单栏添加页面
  • 免费建网站入驻网站优化要用什么软件
  • 东营网站建设方案策划浙江省网站备案注销申请表
  • 北京大型网站建设公司最好企业网站
  • 故乡网站开发的意义北京造价信息网官网
  • 合肥最好的网站建设公司网站高转化页面
  • 旅游的网站怎么做的下载网站模板的软件
  • 网站开发工程师职责国外网站素材
  • 网站死链接扫描旅行社网站建设规划书
  • 网站设计建设平台商贸办公网站入口
  • 知名seo网站优化凌哥seo节点
  • win7做系统网站哪个好找做金融的网站有哪些
  • 什么是网站源码推广资源整合平台
  • 网站建设一龙条wordpress 推送 微信
  • 北京网站设计与建设深圳微信推广平台