C语言——每日一题(轮转数组)

一.前言

前不久学习了时间复杂度的概念,便在力扣上刷了一道需要参考时间复杂度的题------轮转数组

https://leetcode.cn/problems/rotate-array/submissions这道题不能使用暴力算法,因为这道题对时间复杂度的要求不能为O(N^2)。因此我们只能使用其他,简便的方法过关。

二.正文

1.1题目描述

1.2暴力算法(思想对,但是不能通过该题)

看到题目,你可能会想通过双重循环将数字一个个遍历到相应位置,这个思路并没有错,只是答案并不能跑过,因为这个方法的时间复杂度是O(N^2),很明显不符合题目要求。如果你想要看,以这个方法在力扣上该如何显示,请看VCR:

虽然能运行,但是不符合题目要求,因此它才显示只通过37个用例,但其实解题思想是没有问题的。

1.3分段逆置

该方法的的思想是:将一组数据,分段逆置,最后再将整个数据进行逆置。好吧,我知道这样讲确实太抽象了。

对于内部的逆转是这样的:

其他的与上面一样的逆转原理。

以下是源代码

cpp 复制代码
void spin(int *nums,int left,int right)
{
    while(right>left)
    {
        int tmp=nums[right];
         nums[right]=nums[left];
        nums[left]=tmp;
        left++;
        right--;
    }
}
void rotate(int* nums, int numsSize, int k)
{
   int n=numsSize;
   k=k%n;
   spin(nums,0,n-k-1);
   spin(nums,n-k,n-1);
   spin(nums,0,n-1);
}

三.结言

今天的题目分享就到这了,朋友们,咱们下次再见,拜拜~

相关推荐
Sammyyyyy16 小时前
Node.js 做 Web 后端优势为什么这么大?
开发语言·前端·javascript·后端·node.js·servbay
27^×16 小时前
Java 内存模型与垃圾回收机制详解
java·开发语言
max50060016 小时前
本地部署开源数据生成器项目实战指南
开发语言·人工智能·python·深度学习·算法·开源
q5673152316 小时前
手把手教你用Go打造带可视化的网络爬虫
开发语言·爬虫·信息可视化·golang
Bling_Bling_116 小时前
面试常考:js中 Map和 Object 的区别
开发语言·前端·javascript
l1t16 小时前
美团龙猫利用expat库实现的保存xml指定范围数据到csv的C程序
xml·c语言·解析器·expat
程序喵大人17 小时前
写C++十年,我现在怎么设计类和模块?(附真实项目结构)
开发语言·c++·类和模板
黄焖鸡能干四碗18 小时前
信息系统安全保护措施文件方案
大数据·开发语言·人工智能·web安全·制造
liulilittle18 小时前
Unix/Linux 平台通过 IP 地址获取接口名的 C++ 实现
linux·开发语言·c++·tcp/ip·unix·编程语言
Nerd Nirvana18 小时前
C++编程——异步处理、事件驱动编程和策略模式
开发语言·c++·策略模式·嵌入式开发·事件驱动·异步处理