当前位置:首页 > 编程笔记 > 正文
已解决

每日一练——快速合并2个有序数组

来自网友在路上 134834提问 提问时间:2023-10-26 16:24:03阅读次数: 34

最佳答案 问答题库348位专家为你答疑解惑

每日一练来喽~~~

今天up主为大家分享一个,快速合并2个有序数组的法子,注意听哟!

 题目:

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 

在这里我们就打消再建一个数组进行排序的想法吧。

 思路:

1)2个数组的元素逐一进行比较

2)接下来就考虑是比较元素的大还是比较元素的小?

3)从前往后比较还是从后往前比较?

解题方法
需要比较元素谁大
需要从后往前进行遍历,避免数据的覆盖 定义3个下标变量 l1,l2,l3 来判断元素大小

    int l1 = m-1;

    int l2 = n-1;

    int l3 = m+n-1;

 对应草图如下:

对于采用OJ的答题方式对应完整代码如下 

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){//双指针的一个应用int l1 = m-1;int l2 = n-1;int l3 = m+n-1;while(l1 >= 0 && l2 >= 0){//比较哪一个元素大if(nums1[l1] > nums2[l2]){// nums1[l3] = nums1[l1];  // l1--,l3--;可以合并为一句nums1[l3--] = nums1[l1--];}else{nums1[l3--] = nums2[l2--];}}//来到这里说明有一个数组已经遍历完了// 注意当我的数组 nums2遍历完的时候,这时数组就已经完成题目要求了while( l2  >= 0)//数组nums1 已经遍历完了,这时只需把数组2直接逐个给合并的新数组即可{nums1[l3--] = nums2[l2--];}
}

好了,以上就是我要为大家share的今日一练,要是觉得还不错的话,欢迎各位大佬们给俺点个赞,来个关注呗,小生有礼了!

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"每日一练——快速合并2个有序数组":http://eshow365.cn/6-25222-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!