今晚做了下某公司的网络笔试题,好久没刷题了,现在渣得要死,里面有道程序设计题是 把一个数组向右循环移动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)的更多相关文章

  1. 剑指offer43:左旋转字符串(字符串):对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。

    1 题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”a ...

  2. 输入一个数组,求最小的K个数

    被这道题困了好久,看了剑指Offer才知道OJ上的要求有点迷惑性. 题目: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 一 ...

  3. 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  4. 找一个数组的最大和的连续子数组(时间复杂度 O(n))(二)

    要求: 要求数组从文件读取. 如果输入的数组很大,  并且有很多大的数字,  就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出. 另外, 如果输入文件的参数有错误, 这个程序应该 ...

  5. 从一个数组中提取出第start位到第end位

    假设通过数组in来表示一个很大的数(in[0]表示最低bit),提取该数的第start位到第end位(计数起始位为0): #define MAX_BYTE_LEN ( 48 ) int getData ...

  6. 找一个数组的最大和的连续子数组(时间复杂度 O(n))

    设计思想 一开始的思想是求出全部的情况,再分别比较大小,这种方法适用于有限个数组,不适用于输入数组长度和内容的情况. 但也试着做了 int a[]= {-1,2,6,-10}; int size=4; ...

  7. n个元素的数组向左循环移动i个位置

    算法的完美 时间:2012-03-19 / 分类:学习园地,网络文摘 / 浏览:1797 / 0个评论 发表评论 考虑一个问题:将一个具有n个元素的数组向左循环移动i个位置.有许多应用程序会调用这个问 ...

  8. 删除一个数的K位使原数变得最小

    原创 给定一个n位正整数a, 去掉其中k个数字后按原左右次序将组成一个新的正整数.对给定的a, k寻找一种方案,使得剩下的数字组成的新数最小. 提示:应用贪心算法设计求解 操作对象为n位正整数,有可能 ...

  9. artTemplate里一个比不上jQuery tmpl模板的地方就是放一个数组进去它不会自动循环.

    artTemplate里一个比不上jQuery tmpl模板的地方就是放一个数组进去它不会自动循环.

随机推荐

  1. C++_基础_继承、多态

    内容: (1)子类中的拷贝构造和拷贝赋值 (2)多继承和虚继承 (3)多态的初识 (4)虚析构的特性和使用 (5)多态的底层实现 (6)纯虚函数.抽象类的概念 1.子类中的拷贝构造和拷贝赋值 子类中的 ...

  2. The type javax.servlet.http.HttpServletRequest cannot be resolved.

    The type javax.servlet.http.HttpServletRequest cannot be resolved. It is indirectly referenced from ...

  3. PhpStorm 10.0 激活方式

    随着 JetBrains 新版本的发布,注册机已然不行了.然而,道高一尺,魔高一丈.IntelliJ IDEA开源社区 提供了如下通用激活方法:注册时选择License server填写http:// ...

  4. Java处理java.util.ConcurrentModificationException异常

    代码: public static void reduce(HashMap<String, Integer> hashMap, final Integer count) { Iterato ...

  5. WS_CLIPCHILDREN与WS_CLIPSIBLINGS 收藏

    英文单词解释clip:夹子.子弹夹.回形针:夹住,修剪sibling:同胞兄弟或姐妹overlapped:重叠 这两个Window Stype的特性与异同素来不太清楚,今日作一笔记:MSDN的解释为: ...

  6. UVA - 699The Falling Leaves(递归先序二叉树)

    The Falling Leaves Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Sub ...

  7. 如何上传base64编码图片到七牛云

    接口说明 POST /putb64/<Fsize>/key/<EncodedKey>/mimeType/<EncodedMimeType>/crc32/<Cr ...

  8. express小记

    >全局安装方法 `npm install -g express` >cmd切换到你想要放得目录,`express -t ejs blog` 这样就可以生成一个blog文件夹 >还需要 ...

  9. 简单的web三层架构系统【第二版】

    昨天写了 web三层架构的第一版,准确的说是三层架构的前期,顶多算是个二层架构,要慢慢完善. 第一版里,程序虽说能运行起来,但是有一个缺陷,就是里面的SQL语句,是使用的拼接字符进行执行.这样安全系数 ...

  10. WPF datagrid 如何隔行变色

    <DataGrid AlternationCount="2"> <DataGrid.RowStyle> <Style TargetType=" ...