首页 > 编程语言 >C语言笔记28 •顺序表经典算法OJ题•

C语言笔记28 •顺序表经典算法OJ题•

时间:2024-07-05 22:59:58浏览次数:13  
标签:src OJ nums int 28 C语言 -- L2 nums1

1.删除数组中指定的元素

//算法实现

int removeElement(int* nums, int numsSize, int val)
{
    int src = 0;//nums[src] == val src++
    int dst = 0;///nums[src] != val src++  dst++
    while(src< numsSize)
    {
        if (nums[src] == val)
        {
            src++;
        }
        else 
        {
            nums[dst] = nums[src];
            src++;
            dst++;
        }
    }
    return dst;//删除了val的值  返回新数组的有效长度

2.合并两个升幂有序数组

//算法实现
void merge(int* nums1, int m, int* nums2,  int n)//对两个递增数组进行排序
{
    int L1 = m - 1;
    int L2 = n - 1;
    int L3 = m + n - 1;
    while (L1 >= 0 && L2 >= 0)//只要有一个小于0就跳出循环
    {
        if (nums1[L1] > nums2[L2])
        {
            nums1[L3--] = nums1[L1--];
        }
        else
        {
            nums1[L3--] = nums2[L2--];
        }
    }
    while (L2 >= 0) //此情况说明L2中还有剩余数据 需要依次放到num1中
    {
        nums1[L3--] = nums2[L2--];
    }
}

3.代码测试


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>
#include <windows.h>


//1.删除数组中指定的元素
int removeElement(int* nums, int numsSize, int val)
{
	int src = 0;//nums[src] == val src++
	int dst = 0;///nums[src] != val src++  dst++
	while(src< numsSize)
	{
		if (nums[src] == val)
		{
			src++;
		}
		else 
		{
			nums[dst] = nums[src];
			src++;
			dst++;
		}
	}
	return dst;//删除了val的值  返回新数组的有效长度
}
int main()
{
	int arr[] = { 1,2,3,4,1,2,1 };
	int size = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i <size; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	int num = removeElement(arr, size, 1);
	for (int i = 0; i < num; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

//2.合并两个升幂有序数组
void merge(int* nums1, int m, int* nums2,  int n)//对两个递增数组进行排序
{
	int L1 = m - 1;
	int L2 = n - 1;
	int L3 = m + n - 1;
	while (L1 >= 0 && L2 >= 0)//只要有一个小于0就跳出循环
	{
		if (nums1[L1] > nums2[L2])
		{
			nums1[L3--] = nums1[L1--];
		}
		else
		{
			nums1[L3--] = nums2[L2--];
		}
	}
	while (L2 >= 0) //此情况说明L2中还有剩余数据 需要依次放到num1中
	{
		nums1[L3--] = nums2[L2--];
	}
}
int main()
{
	int arr1[6] = { 4,5,6, };
	int arr2[3] = { 1,2,3, };
	for (int i = 0; i < 3; i++)
	{
		printf("%d ", arr1[i]);
	}
	printf("\n");
	merge(arr1, 3, arr2, 3);
	for (int i = 0; i < 6; i++)
	{
		printf("%d ", arr1[i]);
	}
	return 0;
}

标签:src,OJ,nums,int,28,C语言,--,L2,nums1
From: https://blog.csdn.net/qq_64446190/article/details/140219740

相关文章

  • 7.5复习C语言
    7.5复习C语言地址传参和值传参的区别1、地址传参是指将函数调用时实参的地址或指针作为形参传递给函数,函数内对形参所指向的内存空间进行操作会改变实参的值也会影响其他使用该实参的地方。2、值传参是指将函数调用时实参的值复制价给形参函数内对形参进行操作不会影响实参的值......
  • 【C语言题目】34.猜凶手
    文章目录作业标题作业内容2.解题思路3.具体代码作业标题猜凶手作业内容日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词:A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。现在请......
  • 【C语言习题】33.杨氏矩阵
    文章目录作业标题作业内容2.解题思路3.具体代码作业标题杨氏矩阵作业内容有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。要求:时间复杂度小于O(N);2.解题思路我们仔细分析,不难发现,对于杨氏......
  • 【C语言习题】32.字符串旋转结果
    文章目录作业标题作业内容2.解题思路3.具体代码作业标题字符串旋转结果作业内容写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1=AABCD和s2=BCDAA,返回1给定s1=abcd和s2=ACBD,返回0.AABCD左旋一个字符得到ABCDAAABCD左旋两个字......
  • 【LinuxC语言】手撕Http协议之accept_request函数实现(一)
    文章目录前言accept_request函数作用accept_request实现解析方法根据不同方法进行不同操作http服务器响应格式unimplemented函数实现总结前言在计算机网络中,HTTP协议是一种常见的应用层协议,它定义了客户端和服务器之间如何进行数据交换。在这篇文......
  • 从零开始学习嵌入式----C语言“\“字符
    C语言\01932\01\12\09的意思是什么?应该这样看:    所有的ASCII码都可以用"\"加数字(一般是八进制)来表示。而C语言中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符。     1)"\"后面如果跟了三位八进制数字就将\ddd作为......
  • Mybatis PageHelper编译SQL引发的一次性能问题.18286262
    起源最近一直在跟大佬们做公司项目的性能优化,我这种小卡乐咪基本上负责的就是慢接口优化,但实际上只有以下几种情况需要进行接口代码级别的改造:循环查库、RPC数据库设计不合理业务流程太长,代码耦合性太高等随着对接口分析的深入,我们越来越发现系统中有很多拖后腿的问题是与......
  • P10668 BZOJ2720 [Violet 5] 列队春游
    P10668BZOJ2720[Violet5]列队春游期望考虑每个元素什么情况下会产生贡献,然后分别贡献到答案中。当当前枚举的数\(h_i\)在\(i\)与\(pre_i\)之间有一个数字时那么会有对当前方案会有\(1\)的贡献。不妨将严格小于\(h_i\)的数的数量记为\(s_i\),则大于等于\(h_i\)的......
  • C语言的简单学习
    C语言是编译型语言,先编译再运行,通常用gcc进行编译,于是安装了Ubuntu操作系统。至于编辑器,VSCode也能用,先sudoaptinstallbuild-essentialgdb,再在VSCode安装C/C++extension,就可以进行开发了。C语言程序都是 .c文件结尾,新建一个hello_world.c 文件#include<stdi......
  • 海思SD3403/SS928V100开发(14)WIFI模块RTL8821驱动调试
    1.前言芯片平台:海思SD3403/SS928V100操作系统平台:Ubuntu20.04.05【自己移植】WIFI模块:LB-LINK的RTL88212. 调试记录参考供应商提供的操作手册2.1lsusb查看设备2.2编译供应商提供的驱动2.2.1修改Makefile2.2.2编译报错解决办法:将Makefile中arm改成ar......