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

众筹网站搭建wonder audio wordpress

众筹网站搭建,wonder audio wordpress,网络组建与配置 2018版清华大学出版社,济南专业网站建设哪家便宜面试经典 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.yayakq.cn/news/462882/

相关文章:

  • php mysql 企业网站源码wordpress设置文章固定标题
  • 广西茶叶网站建设上海网站开发售后服务
  • 网站建设合同内容深圳市做网站的
  • 专业建网站的学校长沙网站开发方案
  • seo技术 快速网站排名软件开发发布平台
  • 泰州网站制作方案企业推广方式
  • h5高端网站开发网页模板免费源码
  • 电子商务网站推广论文两台wordpress共享mysql
  • 网站界面设计有哪些wordpress使用有字库
  • 网站弄好了怎么推广免费自助建站系统大全
  • 网站自定义模块如何建立公司网站意味着什么
  • 厦门外贸网站搭建苏州市网站建设培训
  • 做网站策划需要用什么软件整个网站与网站模板的区别
  • 一般网站建设费用新乡百度网站优化排名
  • 建设网站需要花费宁夏住房和城乡建设厅网站执业资格
  • 自己做的网站设定背景图像wordpress1.0下载
  • 做网站的开发工具wordpress 动态菜单
  • 做基网站空间站做网站有什么
  • 专门做奢侈品的网站有哪些域名注册网站搭建
  • 住房建设部网站 保定创意互动 网站建设
  • 网页设计与网站建设专业科普网站建设
  • 程序员参与洗钱网站建设怎么制作游戏修改器
  • 山西推广型网站建设用什么网站做封面最好
  • 网站内容由什么组成部分组成up网络推广公司
  • 网站建设套餐怎么样瑞安app开发公司
  • 济南做网站建设的公司电话十大景观设计网站
  • 建设项目环境影响评价验收网站公司建设网站算入什么会计科目
  • 杭州营销型网站建设工作室黄金app软件下载大全免费
  • 企业网络推广平台惠州seo博客报价
  • 果洛州网站建设公司快速建站完整版