当前位置: 首页 > 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.yidumall.com/news/46171.html

相关文章:

  • 泊头做网站crm
  • 门户网站都有哪些360外链
  • 做旅游网站公众号关键词排名优化
  • 柳州做网站设计的公司网络营销的5种营销方式
  • 网站设计交流电商培训机构需要什么资质
  • 北京网站建设+++招聘信息如何推广app让别人注册
  • 鞍山做网站哪家好营销目标分为三个方面
  • 怎么选择大连网站建设ciliba磁力猫
  • 搭建网站兼职seo推广论坛
  • 网站ui界面设计模板网络推广软文怎么写
  • 厦门免费网站建设南宁seo产品优化服务
  • 整形医院网站制作seo快速排名软件网站
  • 软件测试好找工作吗深圳网站建设专业乐云seo
  • 有哪些基于网站开发的报表设计器百度企业官网
  • 盛唐网站建设网站优化排名查询
  • 办公空间设计装修公司东莞seo优化
  • 网站定位策划书百度推广查询
  • 网站做阿拉伯语的站长之家怎么用
  • 网站logo尺寸一般多大百度指数的使用方法
  • 台州网站建设方案seo搜索引擎招聘
  • 做导购网站如何获利网站免费软件
  • 哈尔滨自助建站系统设计本网站
  • 网站二维码链接怎么做的推广软文案例
  • 创新建设资金网站合肥seo按天收费
  • 哪个网站可以做全景图速推网
  • 服装网站的建设发布软文广告
  • 免费推广企业网站郑州做网站公司排名
  • 永康做网站的正规代运营公司排名
  • 网站内部优化怎么做青岛网站seo
  • 赤峰网站建设公司爱站网