Leetcode C语言习题

news2024/12/23 22:32:09

Leetcode习题27:移除元素

题目:

说明:

示例:

题解:

方法一:(开辟额外的数组空间)

我们可以创建一个新的数组,然后用循环来遍历原数组,将原数组中不为 val 的值放到新数组之中去,然后通过新数组向屏幕上面打印相关数据。因为原题要求不使用额外的数组空间(原题中的  O(1)就是不能额外开辟空间),所以该方法不能用。

方法二:(使用指针)

我们首先创建两个变量,其中一个变量叫 src (源数据),另外一个变量叫 dst(目标数据)

当 src 指向的数据为 val 时,src 向后移动一位,dst 不采取任何操作src 和 dst 都向后移动一位;

当 src 指向的数据不为 val 时,src 和 dst 都向后移动一位,同时令 src 指向的值 = dst 指向的值;

当 src 遍历完数组里面所有的元素时,就停止 dst 的拷贝,此时有效值就是 dst 里面所有元素的个数

此时我们就可以写出代码如下:

​
#define _CRT_SECURE_NO_WARNINGS 1
//给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
//
//不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
//
//元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

int removeElement(int* nums, int numsSize, int val) 
{
	//创建两个变量
	int src, dst;
	src = dst = 0;
	while (src < numsSize)//numsSize表示数组的长度
	{
		if (nums[src] == val)
		{
			src++;
		}

		else
		{
			//赋值两指针++
			nums[dst] = nums[src];
			dst++;
			src++;
		}
	}
	//此时dst的值刚好是新数组的有效长度
	return dst;
}

Leetcode习题88:合并两个有效数组

题目:

示例:

题解:

根据题目可以知道:非递减数列本质上就是递增数列(除去相等数据)

由题意可知,nums1 的初始长度是 m + n,因为数组1中需要加入数组2的中的元素,若是长度小于 m + n 的话,则数组2中的所有元素不能够完全的添加进数组1

思路一:(排序)

将数组2中的数据依次放入到数组1的后面,使用排序算法对数组1进行排序(若是仅仅多次使用 for 循环的嵌套,那么将会导致程序效率低下的问题)

思路二:

例如:

有两个数组

num 1:

123

                                0                   1                      2                3              4             5

num2:

256

在两个数组之中分别定义三个变量 l1 和 l2 和 l3,将 l1 和 l2 变量都放在数组有效数据的最后一位,l3 变量放到数组1的最后一位,用 l1 和 l2 变量指向的值从后往前相互比较:(若是我们从前往后比较大小,数组里面的数据可能会存在覆盖问题)

从后往前比大小:比那个数据更大,大的数据往后放

若是 l2 (6)所指向的值大于 l1 (3)所指向的值,那么 l2 (6)代表的数据放到 l3 (【5】)的位置,l2 和 l3 再执行 -- 操作,向前挪动一位,l1 保持在原地不动;

接着比较当前位置 l2 (5)和 l1(3) 数据的大小,若此时 l2 仍旧大于 l1 ,则还是把 l2 代表的数据放到当前 l3 (【4】)的位置,l2 和 l3 再执行 -- 操作,向前挪动一位,l1 保持在原地不动;

若此时 l1 (3)所代表的值大于 l2 (2)所代表的值,则把当前位置 l1 的值放到 l3 (【3】)的位置,l3 和 l1 执行 --操作,向前挪动一位,l2 在原地保持不动;

若是 l2 和 l1 所代表的值相等,则任取一个;

由此类推,直到 num2 遍历完全部数组,则跳出循环;

此时还存在另外一种情况:

num1:

246

num2:

135

通过上述操作,我们可以推算出,l1 先出了循环,而 l2 此时还剩下一位,此事的情况为:

223456

此时 num2 第一位所代表的数字 1 还没有拷贝到 num1 中去,但是此时 l1 已经先走出了循环,现在该怎么办呢?

此时我们应该把 l2 中剩余的数据放到 l3 中去,然后让 l2 和 l3 都采取 -- 操作,向前挪动一位,此时数组有序,成功完成任务。

此题目并不会出现 l1 和 l2 同时小于0的情况

综上所以我们可以写出函数如下:

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) 
//nums1Size:num1数组长度
//nums2Size:num2数组长度
//这两个没有用
{
	int l1 = m - 1;
	int l2 = n - 1;
	int l3 = m + n - 1;

	while (l1 >= 0 && l2 >= 0)//只要满足一个条件就跳出循环
	{
		if (nums1[l1] < nums2[l2])		
		{
			nums1[l3--] = nums2[l2--];
		}
		
		else
		{
			nums1[l3--] = nums1[l1--];
		}
	}
	//出了循环有两种情况l1 >= 0或者l2 >= 0
	//只需要处理:l1 < 0 (l2的数据还没有全部放到num1中)
	if (l2 >= 0)
	{
		nums1[l3--] = nums2[l2--];
	}
	//此时num1包含num2
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1579582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

淘宝/1688开放API数据采集接口:包含商品详情描述及主图,订单列表,订单详情及相关应用

电商网站的数据包含了丰富的市场和用户信息&#xff0c;对于商业决策和竞争分析至关重要。数据采集是获取这些有价值信息的关键步骤。下面将详细介绍如何采集电商网站数据&#xff0c;帮助你掌握这一重要技能。 淘宝/天猫获取购买到的商品订单详情 API 返回值说明 buyer_order…

C语言程序的编译与链接

目录 1.翻译环境和运行环境2.翻译环境2.1 预处理&#xff08;预编译&#xff09;2.2 编译2.3 汇编2.4 链接 3.运行环境 1.翻译环境和运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 翻译环境&#xff1a;在这个环境中源代码被转换为可执⾏的机器指令&am…

maven { url ‘https://www.jitpack.io‘ }在新版Android Studio中的位置

Android Studio升级到Arctic Fox后&#xff0c;一些配置项的位置都做了改变。 github上的很多库通过JitPack.io发布的&#xff0c;引用这些库时&#xff0c;除了在模块的build.gradle文件中加入依赖&#xff0c;还要在项目的build.gradle文件中加入maven { url ‘https://www.j…

Spring事务简介,事务角色,事务属性

1.Spring事务简介 事务作用&#xff1a;在数据层保障一系列的数据库操作同成功同失败Spring事务作用&#xff1a;在数据层或业务层保障一系列的数据操作同成功同失败 public interface PlatformTransactionManager{void commit(TransactionStatus status) throws TransactionE…

【算法每日一练]-动态规划(保姆级教程 篇17 状态压缩)

目录 今日知识点&#xff1a; 把状态压缩成j,dp每行i的布置状态&#xff0c;从i-1和i-2行进行不断转移 把状态压缩成j,dp每行i的布置状态&#xff0c;从i-1行进行状态匹配&#xff0c;然后枚举国王数转移 POJ1185&#xff1a;炮兵阵地 思路&#xff1a; 题目&#xff1a;互…

IP地址中网络号的查看方法

IP地址是互联网中设备的标识&#xff0c;它由网络号和主机号两部分组成。网络号用于标识设备所连接的网络&#xff0c;而主机号则用于标识该网络中的具体设备。了解如何查看IP地址中的网络号对于网络管理员和需要进行网络配置的用户来说至关重要。虎观代理将介绍几种常见的查看…

第⑫讲:Ceph集群OSD扩缩容中Reblanceing数据的重分布

文章目录 1.Reblanceing数据重分布的概念2.验证Reblanceing触发的过程3.Reblanceing细节4.临时关闭Reblanceing机制 1.Reblanceing数据重分布的概念 当集群中OSD进行扩缩容操作后&#xff0c;会触发一个Reblanceing数据重分布的机制&#xff0c;简单的理解就是将扩缩容前后OSD…

windows下使用ZLMediaKit-API+FFmpeg+opengl拉取解码播放流媒体

ZLMediaKit简介 ZLMediaKit是一个基于C11的高性能运营级流媒体服务框架&#xff0c;和SRS类似&#xff0c;功能强大&#xff0c;性能优异&#xff0c;提供多种支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/…

插入排序解读

在众多的排序算法中&#xff0c;插入排序以其直观易懂和在某些特定场景下的高效性而备受青睐。今天&#xff0c;我们就来深入探索一下插入排序的原理、实现方式以及它的优缺点。 一、算法原理 插入排序相当于打牌中抓牌插入的方式。插入排序的工作方式是通过构建有序序列&…

007高并发内存池_回收内存

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;高并发内存池 &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 前言一、ThreadCache回收内存二、CentralCache回收内存2.1 建立映射 三、PageCache回收内存 小结 前言 …

Google视觉机器人超级汇总:从RT、RT-2到AutoRT/SARA-RT/RT-Trajectory、RT-H

前言 随着对视觉语言机器人研究的深入&#xff0c;发现Google的工作很值得深挖&#xff0c;比如RT-2 ​想到很多工作都是站在Google的肩上做产品和应用&#xff0c;​Google真是科技进步的核心推动力&#xff0c;做了大量大模型的基础设施&#xff0c;服(推荐重点关注下Googl…

C语言——关于指针运算的例题分析

1.指针运算中关于 sizeof 和 strlen 的例题分析 1. sizeof(数组名)&#xff0c;这⾥的数组名表⽰整个数组&#xff0c;计算的是整个数组的⼤⼩。 2. &数组名&#xff0c;这⾥的数组名表⽰整个数组&#xff0c;取出的是整个数组的地址。 3. 除此之外所有的数组名都表⽰…

SpringBoot之SpringBoot整合MyBatis

本章详情 使用SpringBoot和MyBatis通过注解的方式操作数据库使用SpringBoot和MyBatis通过XML配置文件的方式操作数据库 项目搭建 1. 打开idea,选择Create New Project 2.选择Spring Initializer,然后点击Next 3.填写组织&#xff0c;坐标等信息&#xff0c;然后点击Next 4.选…

信息泄露漏洞的JS整改方案

引言 &#x1f6e1;️ 日常工作中&#xff0c;我们经常会面临线上环境被第三方安全厂商扫描出JS信息泄露漏洞的情况&#xff0c;这给我们的系统安全带来了潜在威胁。但幸运的是&#xff0c;对于这类漏洞的整改并不复杂。本文将介绍几种可行的整改方法&#xff0c;以及其中一种…

LeetCode-347. 前 K 个高频元素【数组 哈希表 分治 桶排序 计数 快速选择 排序 堆(优先队列)】

LeetCode-347. 前 K 个高频元素【数组 哈希表 分治 桶排序 计数 快速选择 排序 堆&#xff08;优先队列&#xff09;】 题目描述&#xff1a;解题思路一&#xff1a;哈希表记录出现次数&#xff0c;然后用最小堆取&#xff0c;因为每次都是弹出最小的&#xff0c;剩下的一定是K…

【鸿蒙开发】系统组件Column

Column组件 Column沿垂直方向布局的容器。 接口&#xff1a; Column(value?: {space?: string | number}) 参数&#xff1a; 参数名 参数类型 必填 参数描述 space string | number 否 纵向布局元素垂直方向间距。 从API version 9开始&#xff0c;space为负数或者…

error:LNK2005 已经在*.obj中定义 的原因分析及对策

LNK2005是一个重复定义错误&#xff0c;造成LNK2005主要有以下几种情况&#xff1a; 目录 全局变量的重复定义 情况A&#xff1a;全局变量在.cpp文件中的多次声明 情况B&#xff1a;变量名重复 头文件的包含重复 解决方案 #ifndef标识符宏定义 pragma once预编译 头文件…

C++第十五弹---string基本介绍(一)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、什么是STL 2、STL的版本 3、STL的六大组件 4、STL的重要性 5、如何学习STL 6、STL的缺陷 7、为什么学习string类 7.1、C语言中的字符串…

autodl常用工具命令

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 tar/zip命令镜像版本参考torch包全版本下载torch和cuda版本对应conda命令conda打包conda 环境重命名conda环境复制和转移conda环境删除 tar/zip命令 参考链接 文件目录打包&#x…

macU盘在电脑上读不出来 u盘mac读不出来怎么办 macu盘不能写入 Tuxera NTFS for Mac免费下载

对于Mac用户来说&#xff0c;使用U盘是很常见的操作&#xff0c;但有时候可能会遇到Mac电脑无法读取U盘的情况&#xff0c;这时候就需要使用一些特定的工具软件来帮助我们解决问题。本文就来告诉大家macU盘在电脑上读不出来是怎么回事&#xff0c;u盘mac读不出来怎么办。 一、m…