题目要求:

将字符串str进行循环移位,要求算法空间复杂度O(1),时间复杂度O(n)

思路:

假设str需要循环移位k位,则将其分为前后两部分,分别长k和n-k,称AB

则循环移位的过程即为XY->YX. 可由XT即转置完成,(XTYT)T=(YT)T(XT)T=YX

abcdefgh→(abcd)(efgh)→(dcba)(hgfe)→(dcbahgfe)→(efghabcd)

实现如下:

#include <string>
#include <iostream>
using namespace std;
void reverse(string& str,int k,int n)
{
char temp;
while (k<n)
{
temp=str[k];
str[k]=str[n];
str[n]=temp;
k++;
n--;
}
}
void reverseAll(string& str, int k,int n )
{
if (k>0&&n>0)
{
reverse(str,0,k-1);
reverse(str,k,n-1);
reverse(str,0,n-1);
cout<<str<<endl;
}
}
int main()
{
int k,n;
string inStr;
while(1)
{
cout<<"string:";
cin>>inStr;
cout<<endl;
cout<<"k:";
cin>>k;
cout<<endl;
if(!inStr.empty())
{
n=inStr.size();
if (k>n)
{
k%=n;
}
reverseAll(inStr,k,n);
}
}
}

编程珠玑第二章2.3讲到了这种方法,称为求逆算法

在书里用来求解

abcdefgh→defghabc

同样采用本方法:

abcdefgh→(abc) (defgh)→(cba) (hgfed)→(cbah gfed)→(defg habc)

习题5又提出如何将abc→cba

分成三部分

R(R(a)R(b)R(c)) = cba 其中R()就是逆操作

辉爷在讲位图排序时降到了一种使用位操作进行移位的方法,

但是:1.只能对正数或无符号数进行操作 2.与题设要求不太吻合,需要额外空间,而且不能对字符穿操作

但是想法很好,辉爷的PPt确实是好东西

算法之美——循环移位(XY→YX)逆操作相关推荐

  1. 王争数据结构与算法之美开篇问题整理

    数据结构与算法之美笔记整理 为什么大多数编程语言中数组从 0 而不是从 1 开始编号? 从数组存储的内存模型上来看,"下标"最确切的定义应该是"偏移(offset)&qu ...

  2. 开始《数据机构与算法之美》之旅

    文章出处:极客时间<数据结构和算法之美>-作者:王争.该系列文章是本人的学习笔记. 还在学算法,就像还在学英语一样悲催.想想自己为什么要学算法.学,是为了用.学了,能理解Java API提 ...

  3. 算法之美--2.2数组

    2016-11-30   00:00:12 里面有几个数组使用特别需要注意的问题. 1.数组访问越界的问题: 2.数组首地址为指针常量,不能a++; 3. *p++,*(p++),*(++p)的区别. ...

  4. python实现excel单元格合并_python进行excel单元格合并逆操作

    python进行excel单元格合并逆操作.利用anaconda3中的 pandas对包含合并单元格的表进行预处理,完成取消合并单元格的操作. 目标 通过处理表格A,得到表格B. 图1(通过处理表格A ...

  5. 《算法之美》 第三章:数据结构

    文章目录 前言 一.数据结构基础 二.数据结构分解 1.数组 2.链表 3.栈 4.队列 5.树 6.图 总结 前言 好久没更,因为笔者前段时间处理了一些其他的问题,今天我们继续,走进<算法之美 ...

  6. 极客时间 自我提升第二天 数据结构与算法之美 应该掌握 / 趣谈网络原理 / 深入浅出计算机组成原理 思维导图

    菜鸟今天又来完成所说的诺言,也希望大家督促,在今天的学习中,菜鸟有了新的认知,我会将上一篇中理解不完善的一些地方进行补充,学习本就是不断打破自己的认知,如果思考都不做,何来的知识的积累 文章目录 数据 ...

  7. 证明DES解密算法实际上是DES加密算法的逆

    证明DES解密算法实际上是DES加密算法的逆 DES加密算法和解密算法如图: 如图,首先明文输入,进行第一轮的加密.RE0直接作为LE1,RE0与K1作用于轮函数F然后再与LE0疑惑作为RE1,这是第 ...

  8. day2:算法之美|打开算法之门与算法复杂性

    14天阅读挑战赛 系列文章目录 趣味算法(第二版)读书笔记: day1: 序章|学习的方法和目标. day2:算法之美|打开算法之门与算法复杂性 day3.算法之美|函数特性与图形 day4.数学之美 ...

  9. 算法很美-位运算-找出落单的那个数

    上级目录:算法很美 1. 题目 一个数组里除了某一个数字之外,其他的数字都出现了两次.请写程序找出这个只出现一次的数字. 2. 异或思路 异或的运算是A ^ A=0,也就是说偶数个相同的元素异或,结果 ...

最新文章

  1. 在卷积层的运用_Conv 卷积层
  2. Stimulsoft reports .net中创建变量
  3. 在我还是14岁的时候那会学C++
  4. Vue.js入门系列教程(二)
  5. 腾讯智慧金融白皮书:区块链将是未来数字经济基础设施
  6. 计算机大学英语值最高的3项,计算机等级考试一级B上机试题:Windows字处理
  7. mybatis-plus 官方发布神器,一个依赖轻松搞定数据权限,再也不用自己实现了!...
  8. 上下文路径request.getContextPath();与${pageContext.request.contextPath}
  9. 基于SSM的小说阅读网站
  10. QT制作自定义进度条(圆环状)
  11. 【Push Kit】模拟服务端发送消息至客户端,测试消息发送功能(华为推送服务)
  12. RS232/RS485转4G DTU 上传基于Modbus协议的温湿度传感器数据到远程TCP服务器
  13. 利用STL中的vector实现“有向有权图”的邻接表表示
  14. 电商后台管理4-商品列表及添加商品(list.vue和add.vue)
  15. 使用晨曦记账本,分析某个时间段每个账户收支结余
  16. CDH-TXKT-集群的维护
  17. jffs2的目录项查找过程
  18. python统计文章单词次数_Python实现的统计文章单词次数功能示例
  19. word 设置标题前分页
  20. java for循环 写法_java中for循环的6种写法

热门文章

  1. 一个好的“班子”,让你的团队事半功倍
  2. 致命错误:异常代码=C0000005(这篇最详细,收藏之~)
  3. KSM大解锁:5月将有110万枚KSM可用于Kusama上的DeFi应用
  4. Java String 类和正则表达式
  5. C语言中的EOF和feof()
  6. 机器学习-泛化能力笔记
  7. Apache实现盗链与防盗链与隐藏版本信息
  8. 企业级360°全方位用户画像:项目介绍[二]
  9. 安装程序检测出计算机内含有下列,图文帮您win10系统安装ps提示:安装程序检测到计算机处于挂起状态的解决教程...
  10. php商品在最少购买,ecshop每个商品添加最少购买量最小订购量