-
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语言合并两个数组并去重
2021-05-22 17:06:04合并两个数组中的元素到整型数组c,要求去除重复元素并保持c有序(非降序)。例子如下:a = 2,3,4,6,8,9b = 7,9,10c = 2,3,4,6,7,8,9,10// 合并两个含有nA、nB个元素的有序数组void Merge(int *a, int *b, int *c, int...给定含有m、n个元素的两个有序(非降序)整型数组a和b。
合并两个数组中的元素到整型数组c,要求去除重复元素并保持c有序(非降序)。
例子如下:
a = 2,3,4,6,8,9
b = 7,9,10
c = 2,3,4,6,7,8,9,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, 6, 3, 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;
}
-
c语言合并两个已排序数组的示例(c语言数组排序)
2021-01-20 05:30:20问题:将两个已排序数组合并成一个排序数组 这里先不考虑大数据量的情况(在数据量很大时不知大家有什么好的思路或方法?),只做简单数组的处理。 简单代码如下: 说明:之所以把merge函数定义成返回数组长度,是因为... -
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语言讲两个数组合并_C语言程序设计——指南
2020-11-21 09:00:06上次 C 语言写到了数组,有些书是先讲指针,有些书是先讲函数,按照我以前学习 C 语言的顺序,以及对 C 语言的理解,学习的顺序是这样的:数组--->指针--->函数,所以本篇文章讲解 C 之指针。C 语言是值得好好...我应该比大多数读者年龄都要大一些,所以我就自称”谱哥“,做事靠谱,为人靠谱的意思;针对 C 语言三大核心:数组、指针、函数,今天继续写技术文章。
上次 C 语言写到了数组,有些书是先讲指针,有些书是先讲函数,按照我以前学习 C 语言的顺序,以及对 C 语言的理解,学习的顺序是这样的:数组--->指针--->函数,所以本篇文章讲解 C 之指针。
C 语言是值得好好学习的一门语言,是一门基础语言,更是我编程入门的语言,其中很多编程思想,至今影响着我,在工作中对我的帮助很大。
基本概念
学习 C 语言之指针,必须强烈推荐一本书:《C 和指针》,好好看,把这本书吃透,C 指针就差不多了。
1、
指针有两个要素
(1)、首地址:内存中多个连续字节的第一个字节的编号;在 32 位系统下,每个字节的编号都是 32 位二进制,也就是 4B,任何类型的指针都只占 4B 的存储空间。
1char *a; char* a;
2short *b; short* b;
3int *c; int* c;
4double *d; double* d;
5
6printf("%d %d %d %d
-
合并两个有序数组-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)... -
合并两个有序数组(C语言)
2021-11-21 10:52:05合并两个有序数组 【题目】 如果不考虑时间复杂度,那么最直接最暴力的方法是先将 nums2 数组拷到 nums1 数组的后面,然后再用一个简单的排序算法,就能解决问题了。但是在时间复杂度上几乎没有优势。 其实,当我们... -
将两个数组合并到一个数组并排序的c语言程序编写
2021-05-19 07:54:40原理:先将两个数组复制到第三个数组中,然后对第三个数组排序如果不使用第三个函数,那么下面这个函数一样可以做到,不过函数声明就要改成:char* fun(char *dest, char *str, char *dest)/*----------------------... -
c语言讲两个数组合并_Numpy 优雅数组编程笔记
2020-11-21 04:28:28Numpy,Numerical + Python,主攻高维数组的处理,结合了Python代码简洁和C性能优良的优点,是Python科学计算最最最最基础的包。在 “可乐学人” 上一篇文章Matplotlib优雅作图笔记中,优雅的我从作图的“高效性”、... -
c语言讲两个数组合并_算法题解之合并两个有序数组
2020-11-21 04:28:32给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m +... -
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语言 合并有序数组
2022-04-22 15:48:56已有两个数组 arr1 和 arr2,要求将两个数组中元素合并到数组 arr3 中,合并时要去除数组中的重复数据。 #include <stdio.h> int main(void) { int arr1[] = { 3,6,8,9,9,11,45 }; int arr2[] = { 1,3,6... -
合并两个线性表(数组)并按照非递减排序输出,有点问题过来看看
2021-05-24 10:04:54该楼层疑似违规已被系统折叠隐藏此楼查看此楼这是源代码:#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-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语言讲两个数组合并_两列数据相互去掉重复值后合并
2020-11-18 11:27:26这讲的内容利用到动态数组,固定数组,数组的合并,数组的转置等等。还是先看实例,下面的工作表中A列和B列有两列数值如下:我们首先要在A列中去掉B列的重复值,然后在B列中去掉和A列重复的值,然后将剩余的A,B列数... -
C语言实现:合并两个有序的数组,合并后的数组依然有序
2017-12-11 13:07:24有序的数组 -
C语言:合并数组
2021-07-29 09:30:43//数组a有 1,3,5,7,9; //数组 b: 2 4 6 8 10 #include <stdio.h> int main(int argc,char const *argv[]) { int a[] = {1,3,5,7,9}; int b[] = {2,4,6,8,10}; int c[10] = {0}; for(int i = 0;i < ... -
C语言数组合并,去重和不去重
2022-01-20 17:44:05先介绍一个头文件include<algorithm> 本次代码所用的sort函数和unique函数就在这个头文件里面 上代码: #include<iostream> #include<stdlib.h> #include<algorithm> using namespace std; ... -
C语言--合并两个有序数组
2020-02-18 13:51:32合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于... -
C语言实现在数组A上有序合并数组B的方法
2020-12-25 21:02:04分析:如果由前至后合并,复杂度将会是O(N2),这样的复杂度显然不是最优解,利用两个指针指向两个数组的尾部,从后往前遍历,这样的复杂度为O(n2) 由此可以写出下面的代码: #include #include #include using ...