将N个字符的数组,循环右移K位。时间复杂度O(N)
来源:互联网 发布:捷通华声语音合成软件 编辑:程序博客网 时间:2024/05/18 02:59
假设原数组序列为abcd1234,要求变换成的数组序列为1234abcd,即循环右移了4位
比较之后,不难看出,其中有两段的顺序是不变的:1234和abcd
可把两段看成两个整体。右移K位的过程就是把数组的两部分交换一下。变换过程通过以下步骤完成:
1.逆序排列 abcd: abcd1234 -> dcba1234;
2.逆序排列 1234: dcba1234-> dcba4321;
3.全部逆序 dcba4321->1234abcd。
#include<iostream>using namespace std;void _Reserve(int* arr, int begin, int end){ for (int i = 0; i < (end - begin + 1)/2; ++i) { int tmp = arr[begin + i]; arr[begin + i] = arr[end - i]; arr[end - i] = tmp; }}void RightShift(int* arr, int size, int num){ _Reserve(arr, 0, num - 1); //翻转0~num-1区间 _Reserve(arr, num, size - 1); //翻转num~size-1区间 _Reserve(arr, 0, size - 1); //整体翻转}int main(){ int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 ,9 }; int size = sizeof(arr) / sizeof(arr[0]); RightShift(arr, size, 4); return 0;}
阅读全文
0 0
- 将N个字符的数组,循环右移K位。时间复杂度O(N)
- 将N个字符的数组,循环右移K位。时间复杂度O(N)
- 将N个字符的数组,循环右移K位。时间复杂度O(N)
- 将N个字符的数组,循环右移K位。时间复杂度O(N)。
- 把一个含有N个元素的数组循环右移K位, 要求时间复杂度为O(N)
- 【数学】数组循环右移k位,要求时间复杂度为O(n)
- 将N个字符的数组,循环右移K位。
- 试设计一个算法,将数组A(0..n-1)中的元素循环右移k位,并要求空间复杂度为O(1),时间复杂度为O(n)。
- 每日一题——字符串循环右移K位,时间复杂度O(N)
- 在时间复杂度O(n)内,实现将数组A[n]中所有元素左循环移n位
- 将数组 a[n]所有的元素循环右移k位
- 把一个含有N个元素的数组循环右移K位
- 循环右移,要求时间复杂度为O(n)且尽可能的少使用辅助空间
- 将数组A中的元素A[0..n-1]循环右移k位
- 将一个具有n个元素的数组向左循环移动i个位置,使用O(n)复杂度
- 字符串移动k位的时间复杂度o(n)空间复杂度o(1)的解法
- 已知数组A[1...n] ,确定第K小元素 算法的时间复杂度O(n)
- 将数组循环右移k位
- 位图的简易实现及相关面试题
- JavaScript学习记录--实现敏感词过滤
- git初体验
- Mybaits中遇到的问题
- Centos7下安装php-redis扩展及简单使用
- 将N个字符的数组,循环右移K位。时间复杂度O(N)
- 1---LeetCode【Two Sum】|C语言|总结
- 菜鸟先飞之JAVA_StringBuffer类
- windows常用快捷键
- C#中获取系统时间的一种方法
- WebSocket安卓客户端实现详解(二)--客户端发送请求
- 【剑指Offer】面试题57:删除链表中重复的结点
- 欢迎使用CSDN-markdown编辑器
- UILabel 详解