思路一:
其实对待多个数组的数据处理问题,最简单粗暴的方法就是新建一个数组,将处理后的数据存放到新开辟的数组中,对待此问题,可以新建一个数组,然后逐个比较数组nums1和nums2中的元素,将小的数存放到新数组中,然后再继续对比。直到将元数组中的元素都存放到新数组中。但是要注意一个问题,就是当一个数组中的元素已经全部都存放到新建的数组中的时候,程序会跳出循环,此时另一个数组中仍然还剩余元素,现在要做的就是将剩下的元素依次存放到新数组中,但是仍然需要注意,问题问的是存放到数组nums1中,所以在程序的最后要将新建的nums中的元素转移到数组nums1当中。
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int start1=0;
int start2=0;
int start=0;
int* nums=(int*)malloc((m+n)*sizeof(int));
memset(nums,0,(m+n)*sizeof(int));//在函数中另外创建一个数组,不能直接定义数组,利用动态内存管理开辟,并利用memset函数初始化
while(start1<m&&start2<n)
{
if(nums1[start1]<nums2[start2])
{
nums[start++]=nums1[start1++];
}
else
{
nums[start++]=nums2[start2++];
}
}
while(start1==m&&start2<n)
{
nums[start++]=nums2[start2++];
}//当nums1数组中的所有元素都已经放到新数组中,nums2还剩余数据,直接将剩余数据拷贝到新数组
while(start1<m&&start2==n)
{
nums[start++]=nums1[start1++];
}
for(int j=0;j<m+n;j++)
{
nums1[j]=nums[j];
}将nums数组中的数据改放到nums1中
}
注意:在一个函数中需要一个新的数组,不能直接定义,而是要通过动态内存管理开辟一块空间,然后通过memset函数初始化,最后记得将新开辟的数组中的数据拷贝到传入的数组中
思路二:
题目中已经说明了数组nums1的空间大小为m+n,因此可以不再开辟新的数组,直接将nums2中的数据存放到数组nums1当中,把较大的数放到后面,因此要从数组的最后开始,若是nums1有效元素中最后的元素比nums2的大,则将该数据放到nums1数组的最后,否则就将nums2有效元素中最后的元素放到nums1数组的最后。
注意:该方法中,当nums2数组中的元素已经全部存放到nums1当中后,表示该过程已结束,但是当nums1中的元素已经全部都移到后面,而nums2中仍然剩余一部分元素,这时就需要把nums2中剩余的元素拷贝到nums1当中
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int end1=m-1;
int end2=n-1;
int end=m+n-1;
while(end1>=0&&end2>=0)
{
if(nums1[end1]<nums2[end2])
{
nums1[end]=nums2[end2];
end--;
end2--;
}
else
{
nums1[end]=nums1[end1];
end--;
end1--;
}
}
while(end1<0&&end2>=0)
{
nums1[end]=nums2[end2];
end--;
end2--;
}//当nums2中剩余元素,将剩余的元素拷贝到nums1中
}
在这种方法的考虑中,在nums1[end1]>nums2[end2]这个问题的解决时,刚开始时想到的是将nums1[end1]移到nums1[end]的位置,然后剩下的就是nums2[end2]向有序数组中的插入问题,显然这种思路把问题复杂化了,其实在进行赋值之后,eng1–,nums2[end2]自动与下一个元素进行比较,如此则不需要进行插入操作
Eval 计算一个表达式的值并返回结果。 语法:[result = ]eval_r(expression_r) e...
如果你想对使用手机,平板电脑和辅助技术的用户隐藏某些内容,而只对键盘用户显...
一. RabbitMQ 简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用...
Linux 发行版的爱好者们又有全新的 Linux 可以体验了,日前一款名为 TeLOS 的 Li...
Afrikaans:af Albanian:sq Basque:eu Belarusian:be Bulgarian:bg Catalan:ca Ch...
ajax传送json格式数据,关键是指定contentType,data要是json格式 如果是restful...
本文分享自华为云社区《 架构可视化支撑系统演进探索 》原文作者无名小溪。 随着...
今天给大家分享四个在实际开发中,比较实用的SQL Server脚本函数,希望对大家能...
最近在和团队规划OKR目标的时候,我们讨论了很多问题,我先抛砖引玉,列举了一些...
一、导读 本文主要介绍Redhat7.6系统安装oracle 12201版本RAC的一些坑以及避坑方...