C语言-面试题实现有序序列合并

这篇具有很好参考价值的文章主要介绍了C语言-面试题实现有序序列合并。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

要求:
a.输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
数据范围: 1≤n,m≤1000 1≤n,m≤1000 , 序列中的值满足 0≤val≤30000
输入描述:
1.输入包含三行,
2.第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。
3.第二行包含n个整数,用空格分隔。
4.第三行包含m个整数,用空格分隔。
输出描述:
输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
示例1
输入:
5 6
1 3 7 9 22
2 8 10 17 33 44
输出:

1 2 3 7 8 9 10 17 22 33 44

1. 思路

给俩个整形数组arr1[n](用 i 遍历),用 j 遍历arr2[m],合并到arr[3](用 k 遍历),然后比较arr1[i] 和arr2[j]的大小,若arr1[i]<arr[j],把arr3[k]=arr1[i],i++,k++,反之arr3[k] = arr2[j],j++,k++。
C语言-面试题实现有序序列合并,C语言经典题(初级),1024程序员节,c语言

2. 代码

#include <stdio.h>
int main()
{
	int n = 0;
	int m = 0;

	scanf("%d %d", &n, &m);
	int arr1[n];
	int arr2[m];
	int i = 0;
	for ( i = 0; i < n; i++)
	{
		scanf("%d", &arr1[i]);
	}
	for (i = 0; i < m ; i++)
	{
		scanf("%d", &arr2[i]);
	}
	int arr3[m + n];
	i = 0;
	int j = 0;
	int k = 0;
	while (i<n && j<m)
	{
		if (arr1[i] < arr2[j])
		{
			arr3[k++] = arr1[i++];
		}
		else
			arr3[k++] = arr2[j++];
	}
	if (i == n)
	{
		while (j < m)
		{
			arr3[k++] = arr2[j++];
		}
	}
	else
	{
		while (i<n)
		{
			arr3[k++] = arr1[i++];
		}
	}
	for ( i = 0; i < m+n; i++)
	{
		printf("%d ", arr3[i]);
	}
	return 0;
}

把代码写入链接:https://www.nowcoder.com/practice/a9e943b0dab142759807d0cfb6863897?tpId=107&&tqId=33381&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking
点击测试提交

C语言-面试题实现有序序列合并,C语言经典题(初级),1024程序员节,c语言文章来源地址https://www.toymoban.com/news/detail-738140.html

到了这里,关于C语言-面试题实现有序序列合并的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言练习——合并两个有序序列】

    第一行包含两个正整数n, m,用空格分隔; n表示第二行第一个升序序列中数字的个数; m表示第三行第二个升序序列中数字的个数 第二行包含n个整数,用空格分隔 第三行包含m个整数,用空格分隔 输出描述: 输出为一行,输出长度为n+m的升序序列 即长度为n的升序序列和长度

    2024年02月02日
    浏览(45)
  • C语言:实现有序序列判断

    输入一个 整数序列 ,判断 是否是有序序列 , 有序 ,指 序列中的整数 从小到大排序 或者 从大到小排序 ( 相同元素 也 视为有序 )。                 第一行 输入 一个整数N  (3≤N≤50) 。 第二行 输入 N个整数 ,用 空格分隔N个整数 。                              输出

    2024年02月13日
    浏览(31)
  • 力扣经典150题第一题:合并两个有序数组

    合并两个有序数组问题详解与解决方法 1. 介绍 在编程面试中,合并两个有序数组是一个经典的问题。它要求将两个有序数组合并为一个新的有序数组。本篇博客将深入讨论这个问题,并提供解决方法。 2. 问题描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两

    2024年04月23日
    浏览(42)
  • C语言中线性表的合并&有序表的合并以及案例分析和实现

    **线性列表合并:**   案例分析: 要合并两个线性列表,我们考虑以下情况:   1. 两个列表都是空的:在这种情况下,合并的列表也将是空的。 2. 一个列表是空的:如果其中一个列表是空的,则合并的列表将是非空列表本身。 3. 两个列表都是非空的:在这种情况下,我们同

    2024年02月01日
    浏览(62)
  • Java 算法篇-链表的经典算法:有序链表去重、合并多个有序链表

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍         文章目录          1.0 链表的说明          2.0 有序链表去重的实现方式         2.1 有序链表去重(保留重复的节点) - 使用递归来实现         2.2 有序链表去重(保留重复的节点) - 使用双指针

    2024年02月05日
    浏览(45)
  • C语言实现两个集合合并及有序集合的并集(顺序存储、链式存储)

    1、两个集合并集问题 获取LA、LB的表长m、n。 从LB中第一个数据元素开始,循环n次执行:从LB中查找第i(1≤i≤n)个数据元素赋值给e;然后在LA中查找元素e,如果不存在,则将e插入在表LA的最后。 2、算法描述 3、顺序存储实现 4、链式存储实现

    2024年02月07日
    浏览(56)
  • python经典有序序列的list列表推导式

    生成一个数据列表 使用列表推导式生成该数据列表 分析: 1、使用一行代码的列表推导式就完成了该列表的生成 2、[i for i in range(20)],第一个i元素代表向列表list_2中添加的元素 3、[i for i in range(20)],第二个i元素代表for循环遍历的i元素 使用列表推导式生成只有偶数的数据列

    2024年02月02日
    浏览(59)
  • 第21关:基于链表的两个递增有序序列的合并

    任务描述 本关任务:给定两个递增的整数序列A和B,利用链表表示序列A和B,将A和B合并为一个递增的有序序列C,序列C不允许有重复的数据。要求空间复杂度为O(1)。 编程要求 输入 多组数据,每组数据有三行,第一行为序列A和B的长度n和m,第二行为序列A的n个元素,第三行为

    2024年02月05日
    浏览(58)
  • LeetCode面试算法-力扣 88. 合并两个有序数组

    88. 合并两个有序数组 题目描述     给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意: 最终,合并后数组不应由函数返回,而是存储

    2024年02月10日
    浏览(49)
  • 面试经典150题——删除有序数组中的重复项

    题目来源 力扣每日一题;题序:26 我的题解 方法一 双指针 使用两个指针分别指向相同元素的左右边界,再利用一个count记录最终需要的数组长度。 时间复杂度 :O(n) 空间复杂度 :O(1) 有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持

    2024年04月14日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包