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

华为OD面试手撕算法-合并排序数组

题目描述

本题是leetcode一道简单题:合并两个有序数组,但是对于时间和空间复杂度面试官明确给出了限制。

// 给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。
// 初始化 A 和 B 的元素数量分别为 m 和 n。
//
// 示例:
// 输入:
// A = [1,2,3,0,0,0], m = 3
// B = [2,5,6],      n = 3
//
// 输出: [1,2,2,3,5,6]
//
// 说明:A.length == n + m
//
// 最低要求:时间复杂度:O(m+n)、空间复杂度:O(m+n)

思路分析

第一种解法合并+快排

思路:最简单的办法就是将B数组添加到A数组的末尾,再对A数组进行快排,但是其时间复杂度O((m+n)\log(m+n))和空间复杂度为O(\log(m+n))均不符合要求,所以PASS

第二种解法:双指针

思路

1)初始化:定义三个指针p1,p2和p分别指向数组A的m-1,B的n-1,和A的m+n-1的下标;

2)遍历过程:使用p1,p2指针遍历数组A和B,将较大的元素放入p下标处,直到将数组B的元素全部放入数组A中;

3)输出结果:最后输出数组A

代码实现

基于以上思路,Golang的代码实现如下:

func MergeSortedArrays(nums1 []int, m int, nums2 []int, n int)  {p1, p2, p := m-1, n-1, m+n-1//直到nums2遍历完结束for p2 >= 0 {//从后向前遍历,取两者较大值//若p1先遍历完,可能会出现下标越界,所以应判断p1>=0?if p1 >= 0 && nums1[p1] > nums2[p2] {nums1[p] = nums1[p1]p1--} else {nums1[p] = nums2[p2]p2--}p--}
}

http://www.lryc.cn/news/330597.html

相关文章:

  • 云智慧发布对象关系型数据库CloudPanguDB,打破传统技术壁垒
  • 6.8物联网RK3399项目开发实录-驱动开发之RTC实时时钟的使用(wulianjishu666)
  • VUE——概述
  • 合宙4G模块Air724UG调试过程(短信发送、上传数据到华为云IOT)
  • 【项目新功能开发篇】需求分析和开发设计
  • CentOS 7 下离线安装RabbitMQ教程
  • 【Servlet】session保存作用域
  • 企业周年庆3d云展厅促进了客企间交流与互动
  • Android Studio学习5——布局layout与视图view
  • 设计模式(15):迭代器模式
  • 前端内部技术分享---前端组件之表格组件的封装与使用(Vue3)
  • 【一】Mac 本地部署大模型
  • vue实现相机拍摄,可录视频、拍照片、前置后置切换(简单小demo)
  • 【项目】牛马点评 问题汇总
  • 使用 Docker Compose 部署邮件服务器
  • FastAPI+React全栈开发21 探索React路由器和其他好东西
  • Java pdfbox 给 PDF 添加文字和图片水印 并旋转45度
  • 微信小程序中路由跳转方式
  • Flutter应用发布前的关键iOS设备测试策略
  • 深入理解Linux环境配置文件:.bashrc、.bash_profile和.profile
  • 数据库设计规范(三大范式)
  • 图论模板详解
  • ArcGIS Pro打不开Excel?Microsoft驱动程序安装不上?
  • 简单了解裸眼3D呈现技术
  • 单元测试——Junit (断言、常用注解)
  • 【蓝桥杯每日一题】4.2 全球变暖
  • ffmpeg点对点音视频udp协议传输
  • ensp华为AC+AP上线配置
  • JAVA基础02-Java语言基础以及编译准备工作
  • Photoshop 2024 Mac/win---图像处理的新纪元,解锁无限创意