-
2022-06-11 16:11:25
思路就是使用一个更大的第三方数组,将两个数组的数据放入第三方数组中,即完成合并。
代码如下:
#include<stdio.h> #include<string.h> void my_strcat_arrcy(char *str, char *arr, char * brr) { int i; for( i = 0; i < strlen(str); i++) { brr[i] = str[i]; } for(i = 0; i < strlen(arr); i++) { brr[strlen(str) + i] = arr[i]; } } int main() { char str[] = "hello"; char arr[] = "world"; char brr[5]; my_strcat_arrcy(str,arr,brr); printf("%s",brr); return 0; }
运行结果为:
helloworld
更多相关内容 -
c语言讲两个数组合并_让我们一起啃算法----合并两个有序数组
2020-11-21 04:28:29合并两个有序数组(Merge-Sorted-Array)题干:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以...合并两个有序数组(Merge-Sorted-Array)
题干:
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
来源:力扣(LeetCode)这是一题关于数组的题目。目前为止讲解数组、字符串相关的题目都会引入一个解题思路: 双指针思路。其实就是想让小伙伴们培养一个习惯:面对数组、字符串类型的题目先用 双指针思路 来捣腾捣腾。
当然这题也是引用这个思路来解题,只不过这时候的 双指针 不在指向一个数组,而是分别指向数组 num1 和 num2。
解题思路
简单粗暴的方式就是将 num1 和 num2 直接合并,再重新排序,当然不建议这么做啦。
我们仔细审一下题:题目告诉我们 num1 和 num2 是有序的,并且是从小到大排序的。那我们是不是可以从左到右依次比较 num1 和 num2 中的元素值,并将 较小的值minV 逐一存储到一个新的数组 num3 中。
但是题目有一个限制:需要将 num2 直接合并到 num1 中。这时候我们发现用从左到右的方式遍历,并将 minV 插入到 num1 中势必会产生挪动 num1 元素的操作,例如:需要在 num1 索引为 2 的位置插入 minV,那么需要将原本 索引为 2 的元素以及之后的元素都向后挪一位,空出索引为 2 的位置。成本有点大,并且也不好实现。
那么如何解决上面的问题呢?其实换成从右向左遍历就行啦。我们知道 num1 现在的长度为 m,当前最大索引记为 i , num2 的长度为 n,当前最大索引记为 j,合并之后 num1 的长度应该是 m + n,最大索引记为 max。我们比较 num1[i] 与 num2[j] 的大小,如果 num1[i] 大于 num2[j] ,那么 num1[max] = num1[i],max 向左移动一位,i 向左移动一位,反之 num1[max] = num2[j],max 向左移动一位,j 向左移动一位。重复上面的操作,具体流程以及一些边界问题,查看下面的流程图:
代码实现
func merge(nums1 []int, m int, nums2 []int, n int) { // max 指向 nums1 与 nums2 合并之后的最后一个元素 max := m + n - 1 // 指向 num1 最后一个元素 i := m - 1 // 指向 num2 最后一个元素 j := n -1 for i >= 0 && j >= 0 { // 从右向左比较值的大小 if nums1[i] > nums2[j] { nums1[max] = nums1[i] // i 向左移动 i-- } else { nums1[max] = nums2[j] // j 向左移动 j-- } // max 向左移动 max -- } // 如果 i 越界了,将 nums2 剩余的元素赋值到 num1 的 [0,m] 之间 for j >= 0 { nums1[max] = nums2[j] max-- j-- } // 如果 j 越界了,其实下面这个循环可以省略。 for i >= 0 { nums1[max] = nums1[i] max-- i-- } }
总结
每天进步一点点,加油!
-
C语言合并两个数组并去重
2021-05-23 01:00:36下面是编程之家 jb51.cc ...合并两个数组中的元素到整型数组c,要求去除重复元素并保持c有序(非降序)。例子如下:a = 2,3,4,6,8,9b = 7,9,10c = 2,7,10// 合并两个含有nA、nB个元素的有序数组void Merge(int *a,in...下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
给定含有m、n个元素的两个有序(非降序)整型数组a和b。
合并两个数组中的元素到整型数组c,要求去除重复元素并保持c有序(非降序)。
例子如下:
a = 2,3,4,6,8,9
b = 7,9,10
c = 2,7,10
// 合并两个含有nA、nB个元素的有序数组
void Merge(int *a,int *b,int *c,int nA,int nB,int& nCout)
{
int i = 0 ;
int j = 0 ;
int k = 0 ;
while (i < nA && j < nB)
{
if (a[i] < b[j])// 如果a的元素小,则插入a中元素到c
{
c[k++] = a[i] ;
++i ;
nCout++;
}
else if (a[i] == b[j])// 如果a和b元素相等,则插入二者皆可,这里插入a
{
c[k++] = a[i] ;
++i ;
++j ;
nCout++;
}
else // a[i] > b[j] // 如果b中元素小,则插入b中元素到c
{
c[k++] = b[j] ;
++j ;
nCout++;
}
}
if (i == nA) // 若a遍历完毕,处理b中剩下的元素
{
for (int m = j; m < nB; ++m)
{
c[k++] = b[m] ;
nCout++;
}
}
else//j == n,若b遍历完毕,处理a中剩下的元素
{
for (int m = i; m < nA; ++m)
{
c[k++] = a[m] ;
nCout++;
}
}
}
测试代码
int main()
{
int* a= new int[6];
int* b= new int[3];
a[0]=2;
a[1]=3;
a[2]=4;
a[3]=6;
a[4]=8;
a[5]=9;
b[0]=7;
b[1]=9;
b[2]=10;
int nOut = 0;
int* output = new int[12];
Merge(a,b,output,nOut);
for (int i=0; i
{
cout << output[i] << "," ;
}
cout << endl;
delete[] a;
a=NULL;
delete[] b;
b=NULL;
delete[] output;
output=NULL;
cout << endl;
return 0;
}
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
总结
以上是编程之家为你收集整理的C语言合并两个数组并去重全部内容,希望文章能够帮你解决C语言合并两个数组并去重所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
-
c语言合并两个已排序数组的示例(c语言数组排序)
2021-01-20 05:30:20问题:将两个已排序数组合并成一个排序数组 这里先不考虑大数据量的情况(在数据量很大时不知大家有什么好的思路或方法?),只做简单数组的处理。 简单代码如下: 说明:之所以把merge函数定义成返回数组长度,是因为... -
c语言讲两个数组合并_算法题解之合并两个有序数组
2020-11-21 04:28:32给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m +...给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]题解分析
方法一:直接合并
将 num2的元素直接添加到 nums1中后,再进行排序,此方法简单,但是时间复杂度比较差
class
执行结果
方法二:双指针法
此题目其实是可以使用双指针的方式
指定两个指针p1, p2分别代表 m-1及n-1即数组 nums1及 nums2的最后下标,p 则是 m+n-1。
当 nums1[p1] < nums2[p2]时,将 nums2[p2]的值放入nums[p]中, 同时 p、p2向左移,即 p--、p2--;
当 nums1[p1] > nums2[p2]时,则将 num1[p1]的值放入 nums[p]中,同时p、p1向左移,即 p--、p1--;
最后再将nums2多余的数据复制至 num1的开头即可(因为是有序的且都比nums1的值小,直接复制过来就可以)
第一步:
第二步:
第三步:
后面依此类推,即可
class
执行结果
-
C 语言,将两个数组合并到另外一个数组中,并且合并之后的数组是有序的。
2021-05-22 15:43:48int a[10] = {0};...printf("a数组为:");for (int i = 0; i < 10; i++) {a[i] = arc4random()%(40 - 20 + 1) + 1;//为数组生成随机元素printf("%d ", a[i]);}printf("\nb数组为:");for (int j ... -
两个数组合并
2014-06-12 01:09:53用C语言编写两个数组合并成一个数组,并有序排列 。数组合并。 -
将两个数组合并到一个数组并排序的c语言程序编写
2021-05-19 07:54:40原理:先将两个数组复制到第三个数组中,然后对第三个数组排序如果不使用第三个函数,那么下面这个函数一样可以做到,不过函数声明就要改成:char* fun(char *dest, char *str, char *dest)/*----------------------... -
c语言讲两个数组合并_两列数据相互去掉重复值后合并
2020-11-18 11:27:26大家好,今日继续讲VBA数组与字典解决方案的第27讲,内容是两列数据中相互去掉重复值之后将数据合并。这讲的内容利用到动态数组,固定数组,数组的合并,数组的转置等等。还是先看实例,下面的工作表中A列和B列有两列... -
c语言讲两个数组合并_求取一维数组中的逆序数
2020-11-21 04:28:32本篇内容组成:什么是逆序数求一维数组中逆序数的基本方法采用归并排序的改良版求取逆序数NO.1,什么是逆序数:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序... -
C语言 关于两个数组求相同或不同元素的问题!
2021-05-22 18:27:14C语言 关于两个数组求相同或不同元素的问题!关注:202答案:4手机版解决时间 2021-02-16 04:29提问者叫我女王2021-02-16 00:07题目(1)是这样的 输入20个字符串到字符数组str[20][30]中,统计其中相同字符的个数!题目... -
合并两个线性表(数组)并按照非递减排序输出,有点问题过来看看
2021-05-20 16:34:30该楼层疑似违规已被系统折叠隐藏此楼查看此楼这是源代码:#includeint f_len(int l[500]){int i=0 , len;printf("please input numbers: ");do{scanf("%d",&l[i]);i++;}while ( (i<500) &... -
c语言讲两个数组合并_C语言 main 函数到底怎么写是对的?
2020-11-21 05:17:50各位,C语言中的main函数大家都再熟悉不过了,这是你学习C语言首先就要学习的东西,但是我看过很多人写的代码包括我们的一些读者在main函数的写法方面版本很多,今天就跟大家聊一聊main函数到底应该怎么写的问题。... -
C将两个有序的数组合并成一个有序数组
2021-11-08 21:29:35编写程序,分别输入两个按从小到大排序...通过比较两个有序数组中的元素,谁小就把谁放到数组c中,直到其中一个数组为空,最后把剩下的数组元素全部放到数组c里。 测试输入: 10 10 15 42 52 59 64 67 73 82 88 3 -
C语言——如何较为高效的方法合并两个有序数组,使之成为一个有序数组
2022-06-04 16:49:42思路:新定义一个数组arr,最大长度为100,从两数组最左边开始比起,把小的放入新集合,然后相应的index下标往下走,每次比较都是比较的最左边未比较过的元素(通过变量),循环比较,直至其中有一个数组遍历结束,... -
c语言讲两个数组合并_C语言如何将两个数组对应的元素相加并赋给第三个数组(C Primer Plus 10 -10)...
2020-11-21 20:41:32程序内容: 把两个数组中相对应的元素相加,然后把结果储存到第3个数组中。也就是说,如果数组1中包含的值是2、4、5、8,数组2包含的值是1、0、4、6,那么该函数把3、4、9、14赋给第三个数组 程序为C Primer Plus... -
C语言中二维数组作为函数参数来传递的三种方法
2020-12-25 23:03:16c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度。 例如: #include void func(int n, char str[ ][5] ) { int i; for(i = 0; i < n; i++) printf("/nstr... -
c语言入门,学习合并数组,去除两个数组中相同的部分
2022-04-04 17:02:48然后就看到了这个代码 int flag = 10; for(i=0;i;i++) { if (arr2[i]>0)arr3[flag++] = arr2[i]; } 我这个时候就有点看不懂了,先定义了flag之后后面的arr3[flag++]这个又是什么呢,是每执行一次for循环flag就会加1... -
c语言讲两个数组合并_C语言程序设计——指南
2020-11-21 09:00:06上次 C 语言写到了数组,有些书是先讲指针,有些书是先讲函数,按照我以前学习 C 语言的顺序,以及对 C 语言的理解,学习的顺序是这样的:数组--->指针--->函数,所以本篇文章讲解 C 之指针。C 语言是值得好好... -
c语言讲两个数组合并_VBA数组与字典解决方案第27讲:两列数据相互去掉重复值后合并...
2020-11-21 04:28:26大家好,今日继续讲VBA数组与字典解决方案的第27讲,内容是两列数据中相互去掉重复值之后将数据合并。这讲的内容利用到动态数组,固定数组,数组的合并,数组的转置等等。还是先看实例,下面的工作表中A列和B列有两列... -
C语言实现在数组A上有序合并数组B的方法
2020-12-25 21:02:04分析:如果由前至后合并,复杂度将会是O(N2),这样的复杂度显然不是最优解,利用两个指针指向两个数组的尾部,从后往前遍历,这样的复杂度为O(n2) 由此可以写出下面的代码: #include #include #include using ... -
c语言数组合并
2019-03-15 20:49:04c语言数组合并;注意,在函数中计算数组的长度可能会出错,尽量调用数组长度值 #include <stdio.h> #include <stdlib.h> void mergelist(int *a,int len_a,int *b,int len_b,int *c);... -
(c语言)合并两个有序数组
2020-10-20 19:44:24合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间... -
C语言:数组的合并
2021-12-11 10:37:51问题:将奇数数组与偶数数组合并为一个数组。 代码: #include <stdio.h> int main() { int array[10]; int even[5] = {0, 2, 4, 6, 8}; int odd[5] = {1, 3, 5, 7, 9}; int loop, index, e_len, o_len;... -
合并两个有序数组-C语言
2022-01-10 00:41:13//两个数组元素分别比较,把数组中小的放到新数组,再把新数组拷回去 void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) { //1.动态开辟空间 int* arr = (int*)malloc(sizeof(int)... -
怎么把两个数组合并到一个数组
2020-11-17 00:12:11<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> //1.一般方法 let array = [1,2]; let arrays = [3,4];... ...