数据结构与算法(第三季):头条、美团、滴滴等面试题01

第一题:88. 合并两个有序数组

一、题目描述

image

二、思路

  • 此题涉及归并排序思想。
  • 搞两个指针,分别指向nums1nums2两个数组最后一个元素,即36。再拿一个指针指向nums1最后一个位置。
  • 拿出nums1nums2两个数组最后一个元素进行比较,将两者中较大值放在nums1最后一位指针处,并将该指针位置向前移动一位。并且较大值数组指针也向前移动一位
  • 循环以上步骤,直到nums2数组下标小于0,则排序完成。
  • nums1数组下标小于0,则只需要将nums2数组剩余值依次赋给nums1即完成排序。

三、代码实现

image

作者提示:小码哥的实现不严谨,如果num1的空间大于m+n,会导致错误。所以cur = m + n - 1

第二题:75. 颜色分类

一、题目描述

image

二、思路

  • 该题目进阶要求空间复杂度O(1),时间复杂度O(n)
  • 一般题目涉及扫描一遍即完成排序的,都会涉及双指针三指针
  • 该题需要准备三个指针紫色指针代表存放2绿色指针代表存放0红色指针代表遍历数组
  • 红色指针遍历时,遇到1则跳过,红色指针++,遇到0则跟绿色指针交换值,绿色指针++,红色指针++。
  • 遇到2,跟紫色指针交换位置,紫色指针--,再次对红色指针的值进行判断。
  • 红色指针的下标大于紫色指针,则退出排序。
image

三、代码实现

image
image

第三题:16.16.部分排序类

一、题目描述

image

二、思路

  • 该题目思路是寻找逆序对
  • 分别从左往右从右往左找到逆序对,这样即可确定范围。
  • 从左往右扫描,记录最大值,如果发现当前值小于最大值,则记录它的位置(有可能是逆序对最大范围),如果当前值大于最大值,则覆盖最大值
  • 从右往左扫描,记录最小值,如果发现当前值大于最小值,则记录它的位置(有可能是逆序对最大范围),如果当前值小于最小值,则覆盖最小值
  • 两次扫描记录的位置范围,就是需要排序的范围。

三、代码实现

image
image
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容