编程之美-数组循环移位

编程之美6:数组循环移位 楼主又来~(≧▽≦)/~啦啦啦,科研,就是要这么一鼓作气。额,其实楼主的老本行是推公式啊,做这些算法题,其实是楼主在偷懒。额,话不多说了,快请出我们今天的主角吧!还是关于数组的-数组循环移位。下面我们来看下题目的要求。题目要求:设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N)O(N),且只允许使用两个附加变量。题目解答我们来自己给个例子,来帮助自己思考。如数组为[1, 2 阅读详情
#include<stdio.h>

void RightShift1(int *arr,int N,int K)
{//循环右移

	K %= N;
	while(K--)
	{
		int t = arr[N - 1];
		for(int i = N - 1; i > 0;--i)
		{
			arr[i] = arr[i - 1];
		}
		arr[0] = t;
	}
}

void Reverse(int *arr,int b,int e)
{
	for( ; b < e; b++,e--)
	{
		int temp = arr[e];
		arr[e] = arr[b];
		arr[b] = temp;
	}
}


void RightShift2(int *arr,int N,int K)
{
	K %= N;
	Reverse(arr,0,N - K -1);
	Reverse(arr,N - K,N-1);
	Reverse(arr,0,N-1);
}



int gcd(int a,int b)
{
	
	if( b == 0 )
		return a;
	else
		return gcd(b,a%b);
}


void RightShift3(int *arr,int N, int K)
{//循环右移

	int i,j;
	int num = gcd(K,N);
	for( i = 0 ;i < num;++i)
	{
		int tmp = arr[i];
		j = i;
		while(1)
		{
			int m = (j + N-K) % N;
			if(m == i)
				break;
			arr[j] = arr[m];
			j = m;
		}
		arr[j] = tmp;
	}
}

旋转字符串;编程珠玑第二章;rotate a one-dimensional vector;循环移位数组;编程之美 一:问题描述: 编程珠玑第二章的第二个问题是字符串(或者理解为向量)旋转问题,具体描述如下: rotate a one-dimensional vector of n elements left by i positions. eg: with n = 8; i = 3, the vector abcdefgh is rotated to defghabc. 这个问题在编程之美中也出现了,问题描述: 设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加 阅读详情

相关推荐

NX二次开发编译时dll自动数字签名及拷贝

在UG5.0开始,所有基于UG二次开发的DLL都要“签名”后才能被客户端上正版的NX调用。

菜鸟爱飞不飞的博客 2683

编程之美——数组循环移位

编程之美——数组循环移位 题目:设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为0(N),且只允许使用两个附加变量。 具体分析请见《编程之美》这本书,下面就直接给出代码。 // xunhuan.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include void Reverse(char a[],int

chenglinhust的专栏 997

VS Code + EIDE + Clangd 构建 Keil/MDK 嵌入式开发新范式

嵌入式C/C++开发长期受限于传统IDE的语法理解弱、导航卡顿、跨工程复用难等问题。Clangd作为基于AST的现代语言服务器,结合EIDE对Keil uVision和ARM MDK工程文件(.uvprojx)的深度解析能力,可将编译配置、芯片型号、内存模型、扩展关键字等语义精准翻译为标准compile_commands.json,从而实现智能跳转、宏展开识别、结构体实时展开等高阶编辑体验。该方案不替换Keil/MDK编译与烧录流程,仅升级代码理解层,天然兼容STC8051、STM32 Cortex-M、G

weixin_34321753的博客 353

编程之美--数组循环移位

<br />面试的时候也碰见了这个问题,我当时采取的解决方案是把数组double,然后从length-k开始遍历length个字符。时间开销是O(2N) = O(N)<br />空间开销是O(2N) = O(N);<br />这个代码就不贴了,实现起来比较简单。<br /> <br />为了减少时间和空间的开销,我们还能有更好的解法么?<br />时间复杂度已经是线性了,这个开销已经不能再降低了,空间呢?<br /> <br />然后我考虑用大小为k的数组保存需要移位的数据,然后执行移位操作。考虑到当k>N

hitrose27的专栏 954

【达梦8】多实例监视集群的部署测试

确认监视器具有状态确认和自动接管两个功能。在数据守护系统的故障自动切换模式下,必须部署一个确认监视器,否则在出现数据库故障时,会导致数据库服务中断。DM 提供了两种确认监视器的配置形式,分别为单实例和多实例。但是当单实例确认监视器故障时,无法继续进行集群的故障自动接管和备库故障确认,影响正常使用,故提供了多实例确认监控器来进一步提高集群的高可用性。在多实例确认监视器中,只有一个实例作为确认监视器提供服务,其它实例作为备库存在而不提供服务。

weixin_45335507的博客 1675

PCL K4PCS算法实现点云粗配准【2026最新版】

K4PCS算法实现点云粗配准。博客长期更新,本文最近一次更新时间为:2026年5月4日。

点云侠的博客 42万+

《编程之美》——数组循环移位

问题: 把一个含有N个元素的数组循环又移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。分析与解法: 全面地考虑问题,K不一定是小于N的,也有可能远大于N。因为右移K位的结果与右移K-N位的结果相同,所以需要对K进行处理,使K %= N。假设原数组是abcd1234,循环右移4位后,数组变为1234abcd。可以看出数组的前后两段的顺序是不变的,于是把数组看成两个部分,右移的过程是把数

zengzhen_优快云的博客 532

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

Systemcall名屋 2980

编程之美_012数组循环移位

// 数组循环移位 // 数组长度为n,循环移位k public class Test { public static void main(String[] args) { String str = "abcd1234"; for (int i = 1; i <= 10; i++) { rightShift1

那些疯狂到以为自己能够改变世界的人,才能真正改变世界! 1043

DeepSeek Harness“一切皆插件”核心机制详解

DeepSeek Harness 的“一切皆插件”核心 = Cordis 微内核 + 服务化能力接口 + 声明式依赖注入 + 类型化事件 + 可逆副作用 + 配置层 Profile/Bundle/Patch 组合。它的工程收益是:把模型、工具、循环、存储、UI 等所有 Agent 能力都变成“可从配置替换、可干净装卸”的单元,而不是写死在框架里。

软件行业技术文化交流。 600

【U-Net 数据集制作】如何制作自己的图像分割数据集?(标注与格式转换),图像分割数据集制作与转换神器

在前面的课程中,我们像搭积木一样手写了 U-Net 的网络架构。很多同学迫不及待地想把自己的图片喂进网络开始“炼丹”。但是,深度学习界有一句名言:“数据决定了模型的上限,而网络结构只是在逼近这个上限。用标注工具标出来的是 JSON 文件,怎么变成 U-Net 需要的黑白掩码(Mask)图?为什么我的 Mask 肉眼看是黑白的,一放进 PyTorch 训练就报?如何快速按 8:2 的比例把几千张图片和标签划分成训练集和验证集?

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 193

[编程之美] PSet2.17 数组循环移位

设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附件变量。比如abcd1234右移4位后为:1234abcd。

飞扬的青春的专栏 958

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

编程之美2.17——数组循环移位——解法…

//---------------------------------------------- //        Author    :心海 //        Date      :2013-12-02 //        Blog      :http://blog.sina.com.cn/u/2116533530 //        Copyright :anyone //       

655

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

编程之美2.17数组循环移位Java版

/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package Test;

TT285955925的博客 557

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

编程之美2.17 数组循环移位

<br />问题描述<br />把一个含有N个元素的数组循环右移K位,如K=4的时候abcd1234->1234abcd。一般考虑K>0的情况,即右移;同时K<N,当然K>=N的话可以通过K%=N得到一样的结果<br /> <br />解法思路详见代码注释<br />/****************************问题描述***************************** 把一个含有N个元素的数组循环右移K位,如K=4的时候abcd1234->1234abcd 一般考虑K>0的情况,即

zsuguangh的专栏 1430

编程之美 数组循环移位

设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附件变量。 法一:        挨个遍历,每个移动K位,复杂度 RightShift(int* arr,int N, int K) { while(K--) { int t=arr[N-1];

1244

编程之美 2.17 数组循环移位

编程之美 2.17 数组循环移位 把一个含有N个元素的数组循环右移K位, 要求时间复杂度位O(N), 且只允许使用两个附加变量. 解法: 使用逆序方法, 分开两段求逆序, 再整体求逆序. 代码 (GCC 4.7.1): /* * BeautyOfProgramming.cpp * * Created on: 2013.11.7 * Au...

weixin_34037977的博客 143

编程之美--数组循环移位

import java.util.Arrays; /** * 将一个数据循环右移 * * */ public class CyclingSift { /** * 右移N 位,也就是 N % len位,此方法复杂度为 O(n2) * * @param array * @param len */ public stat

天上满是飞机 611

编程之美2.17 数组循环移位

这是一个很经典的题目,题目的大概意思是这样的:      有一个存储字符串的数组,需要按照要求循环移动数组中的字符,例如,数组中存储字符 abcd1234,循环右移4位,之后,会得到这样一个字符数组 1234abcd,当然,左移也是同样的解法      想想这个问题不是很难,顺序依次移动就可以了,这样做的话,时间复杂度是O(n2)量级的,那么,有没有更快的方法呢?      首先,我们需要对数组的

张勤一 1693

编程之美2.17——数组循环移位

1、最简单的做法一位一位移,时间复杂度O(K*N) string RightShift1(string &s, int n, int k) { while(k--) { char c = s[n-1]; for(int i = n - 1; i > 0; i--) s[i] = s[i-1]; s[0] = c; } return s; } 2、当K很大时,移

wxl3105的专栏 694

编程之美2.17之数组循环移位

题目描述:设计一个算法,把一个含有N个元素的数组循环右移K位,要求算法的时间复杂度位O(Log2N)O(Log_2N),且只允许使用两个附加变量。 什么意思呢,就是说如果输入序列为:abcd1234,右移2位即变为34abcd12。唯一的要求就是使用两个附加变量。 其实这道题编程珠玑上面也出现过,书中给出的一种符合题意的解法是巧妙地进行翻转。以把abcd1234右移4位为例:第一步:翻转1234

Coder 954

c51数组循环移位_编程之美 2.17 数组循环移位

编程之美 2.17 数组循环移位把一个含有N个元素的数组循环右移K位, 要求时间复杂度位O(N), 且只允许使用两个附加变量.解法: 使用逆序方法, 分开两段求逆序, 再整体求逆序.代码 (GCC 4.7.1):/* * BeautyOfProgramming.cpp * * Created on: 2013.11.7 * Author: Caroline * Ti...

weixin_42445142的博客 204
上一篇: 编程之美-寻找发帖水王
下一篇: 判断一个较大的单链表是否有环及求环的入口点
hello2sys_cs
博客等级 码龄14年 0粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值