品牌宣传网站有哪些,视频网站开发费用,wordpress 添加频道,从做系统后以前的网站打不开了每日一练来喽~~~
今天up主为大家分享一个#xff0c;快速合并2个有序数组的法子#xff0c;注意听哟#xff01; 题目#xff1a;
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2#xff0c;另有两个整数 m 和 n #xff0c;分别表示 nums1 和 nums2 中的元素数…
每日一练来喽~~~
今天up主为大家分享一个快速合并2个有序数组的法子注意听哟 题目
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中使合并后的数组同样按 非递减顺序 排列。
注意最终合并后数组不应由函数返回而是存储在数组 nums1 中。为了应对这种情况nums1 的初始长度为 m n其中前 m 个元素表示应合并的元素后 n 个元素为 0 应忽略。nums2 的长度为 在这里我们就打消再建一个数组进行排序的想法吧。 思路 12个数组的元素逐一进行比较 2接下来就考虑是比较元素的大还是比较元素的小 3从前往后比较还是从后往前比较 解题方法需要比较元素谁大 需要从后往前进行遍历避免数据的覆盖 定义3个下标变量 l1,l2,l3 来判断元素大小 int l1 m-1; int l2 n-1; int l3 mn-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 mn-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的今日一练要是觉得还不错的话欢迎各位大佬们给俺点个赞来个关注呗小生有礼了