把一个数组向右循环移动k位要求时间复杂度为O(n)
今晚做了下某公司的网络笔试题,好久没刷题了,现在渣得要死,里面有道程序设计题是 把一个数组向右循环移动k位要求时间复杂度为O(n) 给的方法定义为
public void solution(int a[],int length,int k)
我当时觉得挺容易的,结果一写出来发现只能移一位。。。
public void solution(int []a,int length,int k){ int temp=a[length-1];
for(int j=length-1;j>0;j--){
a[j]=a[j-1];
}
a[0]=temp;
}
然后发现再加个循环不就可以移动k位了吗?。。可是时间复杂度为O(k*n)了。。最后O(n)的算法有问题没时间了就用了这个。。
public void solution(int []a,int length,int k){
for(int i=0;i<k;i++){
int temp=a[length-1];//这里最后还写错了没减一。。
for(int j=length-1;j>0;j--){
a[j]=a[j-1];
}
a[0]=temp;
}
}
其实这里有个算法:先将前n-k个数逆置,然后将后k个数逆置,最后整个数组逆置。
左移是先将前k个数倒序,然后将后n—k个数倒序
#include<iostream.h>
void convert(int a[], int start, int end)
{
int k, temp;
for (k = ; k < (end-start+)/; k++)
{
temp = a[start+k];
a[start+k] = a[end-k];
a[end-k] = temp;
}
} void yiwei(int a[], int n, int k)
{
convert(a,,n-k-);//将数组前n-k个数逆置(0~n-k),
convert(a,n-k,n-);//将数组后k个数逆置(n-k~n-1),
convert(a,,n-);//将整个数组逆置,
} void main()
{
int a[] = {,,,,,};
yiwei(a,,);
for (int i = ; i < ; i++)
cout << a[i] << '\t';
}
把一个数组向右循环移动k位要求时间复杂度为O(n)的更多相关文章
- 剑指offer43:左旋转字符串(字符串):对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。
1 题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”a ...
- 输入一个数组,求最小的K个数
被这道题困了好久,看了剑指Offer才知道OJ上的要求有点迷惑性. 题目: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 一 ...
- 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
// test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- 找一个数组的最大和的连续子数组(时间复杂度 O(n))(二)
要求: 要求数组从文件读取. 如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出. 另外, 如果输入文件的参数有错误, 这个程序应该 ...
- 从一个数组中提取出第start位到第end位
假设通过数组in来表示一个很大的数(in[0]表示最低bit),提取该数的第start位到第end位(计数起始位为0): #define MAX_BYTE_LEN ( 48 ) int getData ...
- 找一个数组的最大和的连续子数组(时间复杂度 O(n))
设计思想 一开始的思想是求出全部的情况,再分别比较大小,这种方法适用于有限个数组,不适用于输入数组长度和内容的情况. 但也试着做了 int a[]= {-1,2,6,-10}; int size=4; ...
- n个元素的数组向左循环移动i个位置
算法的完美 时间:2012-03-19 / 分类:学习园地,网络文摘 / 浏览:1797 / 0个评论 发表评论 考虑一个问题:将一个具有n个元素的数组向左循环移动i个位置.有许多应用程序会调用这个问 ...
- 删除一个数的K位使原数变得最小
原创 给定一个n位正整数a, 去掉其中k个数字后按原左右次序将组成一个新的正整数.对给定的a, k寻找一种方案,使得剩下的数字组成的新数最小. 提示:应用贪心算法设计求解 操作对象为n位正整数,有可能 ...
- artTemplate里一个比不上jQuery tmpl模板的地方就是放一个数组进去它不会自动循环.
artTemplate里一个比不上jQuery tmpl模板的地方就是放一个数组进去它不会自动循环.
随机推荐
- C++_基础_继承、多态
内容: (1)子类中的拷贝构造和拷贝赋值 (2)多继承和虚继承 (3)多态的初识 (4)虚析构的特性和使用 (5)多态的底层实现 (6)纯虚函数.抽象类的概念 1.子类中的拷贝构造和拷贝赋值 子类中的 ...
- The type javax.servlet.http.HttpServletRequest cannot be resolved.
The type javax.servlet.http.HttpServletRequest cannot be resolved. It is indirectly referenced from ...
- PhpStorm 10.0 激活方式
随着 JetBrains 新版本的发布,注册机已然不行了.然而,道高一尺,魔高一丈.IntelliJ IDEA开源社区 提供了如下通用激活方法:注册时选择License server填写http:// ...
- Java处理java.util.ConcurrentModificationException异常
代码: public static void reduce(HashMap<String, Integer> hashMap, final Integer count) { Iterato ...
- WS_CLIPCHILDREN与WS_CLIPSIBLINGS 收藏
英文单词解释clip:夹子.子弹夹.回形针:夹住,修剪sibling:同胞兄弟或姐妹overlapped:重叠 这两个Window Stype的特性与异同素来不太清楚,今日作一笔记:MSDN的解释为: ...
- UVA - 699The Falling Leaves(递归先序二叉树)
The Falling Leaves Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Sub ...
- 如何上传base64编码图片到七牛云
接口说明 POST /putb64/<Fsize>/key/<EncodedKey>/mimeType/<EncodedMimeType>/crc32/<Cr ...
- express小记
>全局安装方法 `npm install -g express` >cmd切换到你想要放得目录,`express -t ejs blog` 这样就可以生成一个blog文件夹 >还需要 ...
- 简单的web三层架构系统【第二版】
昨天写了 web三层架构的第一版,准确的说是三层架构的前期,顶多算是个二层架构,要慢慢完善. 第一版里,程序虽说能运行起来,但是有一个缺陷,就是里面的SQL语句,是使用的拼接字符进行执行.这样安全系数 ...
- WPF datagrid 如何隔行变色
<DataGrid AlternationCount="2"> <DataGrid.RowStyle> <Style TargetType=" ...