首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Leetcode—合并两个有序数组—C语言

❤️大家好,我是小李很执着❤️ 本文章已整理至LeetCode经典题专栏 ❣️小白选手❣️ 有不足,希望大佬多多指教 期待你的关注,点赞,评论,三连 1.题目 给你两个按 非递减顺序 排列的整数数组... nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。...请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。...合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。...方法二:双指针 此解法学习Leetcode题解所得: 将两个数组看作队列,每次从两个数组头部取出比较小的数字放到结果中  我们为两个数组分别设置一个指针 p1与 p2 来作为队列的头部指针。

11610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C语言刷题系列】合并两个有序数组

    一、问题描述 (注意认真读题) 二、解题思路 1.合并+排序:思路简单,效率低 这是最容易想到的一种方式,先把数组2中的元素都移动到数组1的空闲位置上 再通过任意一种排序方式对数组1进行排序 2...2中元素移动过来的位置,那么将数组2中的元素移动过来是最合适的 分别创建两个变量,指向数组1和数组2中有效元素的尾部,这两个变量起到了指针的作用。...再创建一个变量指向数组1的尾部,从后往前依次放入较大的元素 每次将数组1和数组2的尾部元素进行比较,将较大值放入数组1当前可用的尾部空间 当两个变量任意一个走到小于0时,跳出循环(此时说明数组1或数组2...中的待排序元素已被放置完毕,而这里只需要处理数组2中还有元素未处理的情况。...如果数组2中元素处理完数组1未处理完,此时数组1全部元素是有序的)将数组2中的剩余元素依次放置到数组1中即可 三、源代码 1.合并+排序方式代码 void merge(int* nums1, int m

    9300

    【C语言】Leetcode 88.合并两个有序数组

    一、代码实现 /** * 函数名称:merge * * 功能描述:合并两个已排序的整数数组 * * 参数说明: * nums1:第一个整数数组 * nums1Size:第一个数组的大小...* m:第一个数组中要合并的子数组的起始索引 * nums2:第二个整数数组 * nums2Size:第二个数组的大小 * n:第二个数组中要合并的子数组的起始索引 */...如果end2仍大于等于0,说明nums2中还有剩余元素未合并,继续将剩余元素放入合并后数组的末尾。...循环结束后,合并后的数组即存储在nums1中,且按非递减顺序排列 要注意的地方是在转移的最后剩余的是nums1还是nums2,因为是往nums1中添加,所以是nums1时不会产生影响。...以上是对合并两个有序数组的解题思路和代码解析。

    14810

    C语言—有序序列合并

    要求:输入包含三行, 第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。 第二行包含n个整数,用空格分隔。...8 9 10 17 22 33 44 这种方法比较粗暴简单,但是花费时间代码数量也比较多 #include int main() { int n; int m; //确定俩行的个数...printf("arr2[]="); for (i = 0; i < m; i++) { scanf("%d", &arr2[i]); } printf("\n"); //一种简单粗暴,比较笨重的方法...; // 直接将arr1和arr2合并成arr3,在进行冒泡排序 int arr3[2000]; int k; //先将arr1中的数据给arr3 for (i = 0,k=0; i < n;...i++,k++) { arr3[k] = arr1[i]; } //再将arr2中的数据给arr3 for (k = n, i = 0; k < n + m; k++, i++) {

    6700

    DS顺序表--合并操作 C++

    题目描述 建立顺序表的结构体,属性包括:数组、实际长度、最大长度(设定为1000) 已知两个递增序列,把两个序列的数据合并到顺序表中,并使得顺序表的数据递增有序 输入 第1行先输入n表示有n个数据,接着输入...n个数据,表示第1个序列,要求数据递增互不等 第2行先输入m表示有m个数据,接着输入m个数据,表示第2个序列,要求数据递增互不等 输出 顺序表内容包括顺序表的实际长度和数据,数据之间用空格隔开 第1行输出创建后的顺序表内容...CreatList(a); CreatList(b); c.size = a.size + b.size; c.List = new int[c.size]; for (int i = 0;...i < a.size; i++) c.List[i] = a.List[i]; for (int i = 0; i < b.size; i++) c.List[i + a.size] = b.List...[i]; sort(c.List, c.List + c.size); print(c); }

    27630

    C语言每日一题(29)合并两个有序链表

    力扣网 21合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。...示例 思路分析 最基本的一种思路就是,遍历两个链表,将对应结点的值进行比较,题目要求是要升序排序,即较小的值先排在前面,随后所在链表的较小结点先走,将后面的值于第二个链表的结点进行比较,即谁小谁先排,谁小谁先动...ListNode*)malloc(sizeof(struct ListNode));//哨兵位 struct ListNode* cur1=list1,*cur2=list2;//避免头结点丢失,使用两个指针代替遍历...,否则会造成内存泄漏 free(newhead); return ans; } 实现细节 这里避免使用头结点而采用一个不存放有效值的结点当作哨兵位,就不用考虑头结点为空的情况而是直接存放...动态申请的内存空间不要忘记释放。

    13810

    C语言实现哈希表_哈希表c语言代码

    常见的Hash算法有:MAC,CRC,MD5/MD4,SHA等。 ---- 简单的哈希表的实现,c语言。 哈希表原理 哈希表是为了根据数据的部分内容(关键字),直接计算出存放完整数据的内存地址。...下图是一个哈希表运行时内存布局: 先说一下原理。 先是有一个bucket数组,也就是所谓的桶。 哈希表的特点就是数据与其在表中的位置存在相关性,也就是有关系的,通过数据应该可以计算出其位置。...这个哈希表是用于存储一些键值对(key -- value)关系的数据,其key也就是其在表中的索引,value是附带的数据。...,因为C标准库中string.h中有一系列这样的函数。...因为这个哈希表中保存的是键值对,所以这个方法是从哈希表中查找key对应的value的。

    5K20

    C语言每日一题(22)合并两个有序数组

    合并两个有序数组 题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。...请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。...为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。...合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。...思路分析 方法1 时间复杂度 O(m+n) 空间复制度 O(m+n) 这是最基本的思路,将两个数组从头遍历,分别比较大小,较小的值先放到一个新创建的数组里,比较完后可能会存在剩余的情况,再将剩余的值放入新数组

    17710

    【C】记录两个C语言的误区

    前言 之前在windows上使用vc++6.0,编写过c的代码,主要是为了完成一些作业,并没有十分深入的学习C语言. 因此当时留下了两个对于c语的言的误区,现在记录一下。...一开始我以为是使用的编译器的标准不同,因此尝试着使用c89,c90,c99,c11编译程序,使用c89和c90时, 编译器还是没有报任何错误,而使用c99和c11时,会报下面的警告: test.c:...随后我又看了一下gcc的版本,发现是4.8.4, 然后查看了一下它的手册, 发现其默认使用的c编译标准是c90 The default, if no C language dialect options...: previous implicit declaration of ‘aa’ was here aa(); ^ 如果将aa的void改为double,就会直接报错了: test.c:8:9:...静态数组 另一个误区就是静态数组的定义, 如下面的形式在vc++6.0中编译时会出现错误 int n = 5; int arr[n]; 因此我一直以为在c中定义静态数组必须要制定一个确定的值,而不能是变量

    86020

    【线性表】之顺序表(C语言)

    【线性表】之顺序表 线性表 线性表(linear list)是n个具有相同特性元素的有限序列 。...线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。...但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。 顺序表 它是最简单的数据结构,也是最常用的数据结构——他的作用就是将数据存起来。...概念:顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 顺序表一般可分为: 1.静态顺序表:使用定长数据存储。...2.动态顺序表:使用动态开辟的数组存储。

    63110

    C语言题解 | 去重数组&&合并数组

    ---- 前言 去除数组中重复的元素 和 合并两个数组 也都是很好的题目,都是与 顺序表(数组) 有关的OJ题,适合用来练手,其中 去重数组 是去掉数组中所有重复的元素,确保每个元素都只出现一次;合并数组...指的是合并两个有序数组,合并后的新数组也要确保有序。...} ---- 合并数组 分析 合并两个数组首先要清楚一个点:数组在合并后任然有序,我们可以创建一个足够大的数组,然后 对两个有序数组进行比较,选出 较小 的元素放入新数组中(相等就随便放),最后在将新数组拷贝到第一个有序数组...如果出现 nums2 没有合并完的情况,就需要再额外处理。...这里主要演示第二种思路,不再使用指针,用数组下标的方式实现 思路 代码 //88.合并两个有序数组 void merge(int* nums1, int nums1Size, int m, int*

    32020

    c语言实现有序序列合并

    题目:bc—100 输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。...数据范围: 1≤�,�≤1000 1≤n,m≤1000  , 序列中的值满足 0≤���≤30000 0≤val≤30000  输入描述: 输入包含三行, 第一行包含两个正整数n, m,用空格分隔。...实现思路 对于两个数组,通过取得对应的下标来取得他们的值,并进行比较,小的先输出。...) 比较过程 这里要注意的是,当两个数组大小不相等时,比较完较小的数组后,就没有必要再接着比较了,因为提供的已经是两个升序好的数组。...所以遍历的条件就是当其中一个数组遍历完后,跳出循环,直接输出剩下来的值。 对于里面的比较,我们可以采用下标的方式进行比较,即定义两个整型对应两个数组的下标,

    10910
    领券