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

十堰网站建设怎么样站内推广方案

十堰网站建设怎么样,站内推广方案,跨境电子商务网页制作与网站建设,游戏类网站欣赏面试经典 150 题 ---- 合并两个有序数组 合并两个有序数组方法一:直接合并后排序方法二:双指针方法三:逆向双指针 合并两个有序数组 方法一:直接合并后排序 这种方法最简单,直接将 nums2 的数组放到 nums1 数组的尾部…

面试经典 150 题 ---- 合并两个有序数组

  • 合并两个有序数组
    • 方法一:直接合并后排序
    • 方法二:双指针
    • 方法三:逆向双指针

合并两个有序数组

方法一:直接合并后排序

这种方法最简单,直接将 nums2 的数组放到 nums1 数组的尾部,然后对 nums1 进行排序即可

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {for (int i = 0; i < n; i ++ ) {nums1[i + m] = nums2[i];}Arrays.sort(nums1);}
}

时间复杂度: O((m + n)log(m + n))
数组长度为 m + n,快排的时间复杂度为 O((m + n)log(m + n))

空间复杂度: O((m + n)log(m + n))
数组长度为 m + n,快排的时间复杂度为 O((m + n)log(m + n))

方法二:双指针

方法一没有使用到数组已经被排序的性质。利用这一性质,我们可以使用双指针方法。将两个数组看作队列,每次从数组的头部取出一个比较小的值放到结果中。

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 = 0, p2 = 0;int[] sorted = new int[m + n];int cur = 0;while (p1 < m || p2 < n) {if (p1 == m) {sorted[cur] = nums2[p2++];} else if (p2 == n) {sorted[cur] = nums1[p1++];} else if (nums1[p1] < nums2[p2]) {sorted[cur] = nums1[p1++];} else {sorted[cur] = nums2[p2++];}cur ++ ;}for (int i = 0; i < m + n; i ++ ) {nums1[i] = sorted[i];}}
}

时间复杂度: O(m + n)
指针单调移动,最多移动 m + n 次,因此时间复杂度为 O(m + n)

空间复杂度: O(m + n)
需要建立长度为 m + n 的中间数组

方法三:逆向双指针

方法二需要使用临时变量,是因为直接合并到 nums1 中,nums1 中的元素可能会在取出之前被覆盖。那么如何直接避免覆盖 nums1 中的元素呢?可以使用双指针从后往前遍历,每次取两者之中的比较大者放进 nums1 的最后面。

为什么从后往前,将大的元素放入到 nums1 中就不会出现覆盖元素的情况呢?
可以这样想象。如果是将 nums2 中的元素放入了 nums1 中,那么此时 nums1 的元素肯定不会被覆盖,如果是将 nums1 中的元素放入了 nums1 的后半部分,nums1 的前半部分就肯定会出现一个空位,从而保证全部元素都可以放进去且不会发生覆盖。

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 = m - 1, p2 = n - 1;int cur = nums1.length - 1;while(p1 >= 0 || p2 >= 0) {if (p1 == -1) {nums1[cur -- ] = nums2[p2 -- ];} else if (p2 == -1) {nums1[cur -- ] = nums1[p1 -- ];} else if (nums1[p1] > nums2[p2]) {nums1[cur -- ] = nums1[p1 -- ];} else {nums1[cur -- ] = nums2[p2 -- ];}}}
}

时间复杂度: O(m + n)
指针单调移动,最多移动 m + n 次,因此时间复杂度为 O(m + n)

空间复杂度: O(m + n)
直接对 nums1 原地修改,不需要额外的空间

http://www.hkea.cn/news/849648/

相关文章:

  • 网站名字要备案吗友情链接怎么弄
  • 江苏网站开发外链网站大全
  • 网站代备案流程图百度关键词优化排名技巧
  • 石狮建设局网站今日头条站长平台
  • 修改公司网站网页站长素材音效
  • 网站速度测速免费访问国外网站的app
  • 常州网站搭建公司宣传推广渠道有哪些
  • 中国建设监理网站广告网络
  • 网站维护费用怎么收路由优化大师官网
  • 如何加入小说网站做打字员合肥网站优化推广方案
  • 网站建设现状关键词在线优化
  • 网站建设就业百度网址导航主页
  • 郑州公司做网站汉狮中囯联通腾迅
  • 专业网上购物平台优化网站的步骤
  • 用web开发一个网站怎么做网站推广优化平台
  • 建设企业网站进去无法显示搜索引擎seo
  • 网站 分辨率百度视频推广
  • 中国红河网seo排名工具
  • 做网站商丘3a汽车集团公司网络营销方案
  • 网络宣传推广策划范文seo如何优化排名
  • 网站 建设 原则新闻今天的最新新闻
  • 服装网站首页设计主要推广手段免费
  • 网站建设公司做销售好不好?seo搜索引擎优化实训总结
  • 江西威乐建设集团有限公司企业网站长春关键词优化公司
  • 深圳网站建设lxhd英文关键词seo
  • 在线购物商城网站百度移动端排名软件
  • 太原网站的公司友情链接的英文
  • 网站是用什么做的吗百度q3财报2022
  • 深圳福田网站建设公司如何做谷歌seo推广
  • 西安有做网站的吗北京网站设计公司