轮转数组——C语言

news2024/9/29 23:23:47

题目:
在这里插入图片描述

解法1:把最后一位数字移动到数组的第一位,然后将第二位开始的每一位往前移动一位
这种方法的时间复杂度=O(N^2)
空间复杂度=O(1)

rotate(int* arr, int n, int k)
{
	k %= n;
	int i = 0;
	for (i = 0; i < k; i++)//旋转k次
	{
		int tmp = arr[n - 1];//把最后一个数拿出来赋给tmp
		//剩余元素整体向后移动
		int j = 0;
		for (j = n - 1; j > 0; j--)
		{
			arr[j] = arr[j - 1];
		}
		arr[0] = tmp;//把最后一个值赋给数组的首元素处
	}

	int a = 0;
	for (a = 0; a < n; a++)
	{
		printf("%d", arr[a]);
	}
	
}

int main()
{
	int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
	int n = sizeof(arr) / sizeof(arr[0]);
	int k = 0;
	scanf("%d", &k);
	rotate(arr, n, k);
	return 0;
}

解法2:重新创建一个数组,把需要旋转的拿几个数字放在数组中,然后再把剩余的数放到这个新数组的后面
这种方法的时间复杂度=O(N)
空间复杂度=O(N)

void rotate(int* nums, int numsSize, int k) 
{
	int* tmp = (int*)malloc(sizeof(int) * numsSize);//开辟大小为n的动态内存
	k = k % numsSize;
	memcpy(tmp, nums + numsSize - k, sizeof(int) * k);//把旋转的数拷贝到新数组中
	memcpy(tmp+k, nums, sizeof(int) * (numsSize-k));//剩下的数拷贝到新数组的后面
	memcpy( nums,tmp,  sizeof(int) * numsSize);//把新数组拷贝给原来的数组
	free(tmp);

}

解法3:原地解决(三旋法)——最优法
这种方法的时间复杂度=O(N)
空间复杂度=O(1)在这里插入图片描述

void reve(int arr[], int left, int right)//逆置函数,三个逆置都适用
{
	while (left < right)
	{
		int tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++;
		right--;
	}
}
rotate(int* arr, int n, int k)
{
	k %= n;
	reve(arr, n - k, n - 1);//逆置后面的数
	reve(arr, 0, n - k - 1);//逆置前面的数
	reve(arr, 0, n - 1);//整体逆置
	int i = 0;
	for (i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
}
int main()
{
	int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
	int n = sizeof(arr) / sizeof(arr[0]);
	int k = 0;
	scanf("%d", &k);
	rotate(arr, n, k);
	return 0;
}

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

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

相关文章

实战项目 在线学院springcloud调用篇3

一 springcloud与springboot的关系 1.1 关系 1.2 版本关系 二 案例工程 2.1 工程结构 2.2 调用关系 2.3 注册的配置 1.nacos的搭建部署 2.vod&#xff0c;edu项目的注册nacos 3.查看

如何使用Wireshark进行网络流量分析?

如何使用Wireshark进行网络流量分析。Wireshark是一款强大的网络协议分析工具&#xff0c;可以帮助我们深入了解网络通信和数据流动。 1. 什么是Wireshark&#xff1f; Wireshark是一个开源的网络协议分析工具&#xff0c;它可以捕获并分析网络数据包&#xff0c;帮助用户深入…

11、vue3

一、为什么要学 Vue3 1.1 为什么要学 Vue3 1.2 Vue3的优势 1.3 Vue2 选项式 API vs Vue3 组合式API Vue3 组合式API vs Vue2 选项式 API 二、create-vue搭建Vue3项目 2.1 认识 create-vue 2.2 使用create-vue创建项目 前提环境条件 已安装 16.0 或更高版本的 Node.js node -…

iOS 如何对整张图分别局部磨砂,并完全贴合

官方磨砂方式 - (UIVisualEffectView *)effectView{if(!_effectView){UIBlurEffect *blur [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];_effectView [[UIVisualEffectView alloc] initWithEffect:blur];}return _effectView; }使用这种方式对一张图的上半部分和…

Andriod Studio不支持项目指定的Gradle插件版本

1&#xff0c;问题描述&#xff1a; 我之前的项目执行编译之类的是OK的&#xff0c;download下来最新的代码之后&#xff0c;发现很多编译错误&#xff0c;用gradle更新一下依赖包&#xff0c;发现出现下面的错误 The project is using an incompatible version (AGP 8.1.0) …

基于微信小程序的仓储进销存管理系统_r275i

随着科学研究的不断深入&#xff0c;有关仓储的各种信息量不断成倍增长。面对庞大的信息量&#xff0c;就需要有仓储管理系统来提高管理工作的效率。通过这样的系统&#xff0c;我们可以做到信息的规范管理和快速查询&#xff0c;从而减少了管理方面的工作量。 建立仓储管理系…

Spark大数据分析与实战笔记(第一章 Scala语言基础-1)

文章目录 章节概要1.1 初识Scala1.1.1 Scala的概述1.1.2 Scala的下载安装1.1.3 在IDEA开发工具中下载安装Scala插件1.1.4 开发第一个Scala程序 章节概要 Spark是专为大规模数据处理而设计的快速通用的计算引擎&#xff0c;它是由Scala语言开发实现的&#xff0c;关于大数据技术…

Java可视化物联网智慧工地SaaS平台源码:人脸识别考勤

基于微服务JavaSpring Cloud Vue UniApp MySql实现的智慧工地云平台源码 智慧工地是指利用云计算、大数据、物联网、移动互联网、人工智能等技术手段&#xff0c;为建筑施工现场提供智能硬件及物联网平台的解决方案&#xff0c;以实现建筑工地的实时化、可视化、多元化、智慧化…

oracle存储过程调试

oracle如果存储过程比较复杂&#xff0c;我们要定位到错误就比较困难&#xff0c;那么可以存储过程的调试功能 先按简单的存储过程做个例子&#xff0c;就是上次做的存储过程&#xff08;proc_test&#xff09; 1、先在数据库的procedures文件找到我们之前创建存储过程 2、选…

C语言实现:从sm2 PEM文件中提取公钥和私钥因子

我们知道使用openssl命令行从国密sm2的pem中提公钥私钥因子的命令行如下&#xff1a; openssl ec -in sm2_test_priv.pem -text -noout 从私钥pem提取私钥openssl ec -pubin -in sm2_test_pub.pem -text -noout 从公钥pem提取公钥 以私钥提取为例&#xff0c;那么以上部分&am…

新加坡GAIR 2023:AI 绽放之时

2023年8月14日&#xff0c;第七届GAIR全球人工智能与机器人大会&#xff0c;在新加坡乌节大酒店拉开帷幕。 大会共开设10个主题论坛&#xff0c;聚焦大模型时代下的AIGC、Infra、生命科学、教育&#xff0c;SaaS、web3、跨境电商等领域的变革创新。这是国内首个出海的AI顶级论坛…

绘制区块链之链:解码去中心化、安全性和透明性的奇迹

区块链技术以其去中心化、安全性和透明性等特点在全球范围内引起了广泛的关注和兴趣。区块链是一种分布式账本技术&#xff0c;通过将数据以不可篡改的方式链接在一起&#xff0c;创建了一个安全可靠的数据库。这种革命性的技术正在许多领域中发挥作用&#xff0c;包括加密货币…

【Linux】临界资源和临界区

目录 一、临界资源 二、如何实现对临界资源的互斥访问 1、互斥量 2、信号量 3、临界区 三、临界区 四、进程进入临界区的调度原则 一、临界资源 概念&#xff1a;临界资源是一次仅允许一个进程使用的共享资源&#xff0c;如全局变量等。 二、如何实现对临界资源的互斥访问 …

【Java】基础练习(十)

1.判断邮箱 输入一个电子邮箱&#xff0c;判断是否是正确电子邮箱地址。 正确的邮箱地址&#xff1a; 必须包含 字符&#xff0c;不能是开头或结尾必须以 .com结尾和.com之间必须有其他字符 (1) Email类&#xff1a; package swp.kaifamiao.codes.Java.d0823; /** 输入一个…

从互联网到车企做测试,什么体会?

互联网软件测试&#xff0c;能跨到车企做测试么&#xff1f; 这是我之前在某个群里划水看到一位小伙伴提出过的问题&#xff0c;当时我并没有回答&#xff0c;不过这个主题我倒是记在了草稿里&#xff0c;因为我自己就是这样的经历&#xff0c;留着后面有时间写一些内容分享一…

了解混淆矩阵和方差分析分数之间的差异

一、说明 开始都本文之前&#xff0c;需要读者预先知道两个概念&#xff0c;方差分析、混淆矩阵&#xff1b;本文将对两者的异同点进行分析。 二、混淆矩阵、方差分析 2.1 混淆矩阵 混淆矩阵就像一个图表&#xff0c;可以帮助我们了解机器学习模型的表现如何。想象一下&#xf…

【洛谷算法题】P1000-超级玛丽游戏【入门1顺序结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P1000-超级玛丽游戏【入门1顺序结构】&#x1f30f;题目描述&#x1f30f;输入格…

深入理解linux内核--进程间通信

管道 管道(pipe)是所有Unix都愿意提供的一种进程间通信机制。管道是进程之间的一个单向数据流&#xff1a; 一个进程写入管道的所有数据都由内核定向到另一个进程&#xff0c;另一个进程由此就可以从管道中读取数据。 在Unix的命令shell中&#xff0c;可以使用“1”操作符来创…

银河麒麟arm版服务器安装docker

安装 在线安装&#xff1a;输入下面命令&#xff0c;等待安装完成即可 #关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.serviceyum install -y docker# 修改docker拉取源为国内 rm -rf /etc/docker mkdir -p /etc/docker touch /etc/docker/da…

第8天----【位运算进阶之----异或(^)】

今天我们来学习C语言中的异或。 文章目录 一、基本知识&#xff1a;异或操作满足的定律&#xff1a;(important) 二、拓展应用&#xff1a;1. 交换两个变量的值&#xff1a;2. 判断两个数的奇偶性&#xff1a;3. 检测落单的数(出现奇数次的数)&#xff1a;检测丢失的数: 4. 加密…