算法 Tricks(一)—— 字符串和数组的翻转

原创 2016年06月01日 10:11:21

所谓字符串和数组的翻转,其实是对应位的交换,考察的是下标之间的关系,要交换的下标的关系为:

swap(S[i],S[n1i])

也即下标之和为数组的长度减1,而与数组的长度为奇数还是偶数无关。

void ReverseArray(int *A, int n){
    for (int i = 0; i < n/2; ++i){
        swap(A[i], A[n-1-i]);
    }
}

当然更一般化的接口设计为:

void ReverseArray(int *A, int lo, int hi){
    // ReverseArray(int *A, int n) ⇒ ReverseArray(A, 0, n)
    // [lo, hi)
    for (int i = 0; i < (lo + hi)/2; ++i){
        swap(A[lo + i], A[hi - i - 1]);
    }
                // lo + i + (hi - i - 1) == lo + hi - 1
}

当然也可以不借助 swap 函数的写法为:

void ReverseArray(int *A, int lo, int hi){
    while (lo < hi){
        int t = A[lo];
        A[lo++] = A[--hi];
        A[hi] = t;
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++ 基础(三) —— 字符串、向量和数组

C++ Primer(三) —— 字符串、向量和数组

黑马程序员——零基础学习iOS开发——06 字符串、指针、指针和数组、指针和字符串、指针和函数

一、字符串 1.什么是字符串  简单的字符串 ”itcast” 2.字符串的初始化 //都是字符串 char name[8]= "it"; char name2[8]=...

字符串和数组

  • 2012年03月19日 17:11
  • 196KB
  • 下载

《c++primer》笔记 第3章 字符串、向量和数组

标准库类型本章重要的两个:string和vector,以及配套的迭代器。 3.1 命名空间的using声明using声明具有如下的形式:using namespace::name;一旦声明了上述语句,...

JS中实现字符串和数组的相互转化

早上起来看了一道JS的面试题,是这样描述的:利用var s1=prompt("请输入任意的字符串","")可以获取用户输入 的字符串,试编程将用户输入的字符串“反转”,并且将字符串输出。       ...

第三章 字符串、向量和数组

一、一般情况下不要再头文件中使用using naespace XXX;

objective-c第三天 可变字符串和数组

可变字符串:NSMutableString注:简单创建字符串的方式,创建出来的是不可变字符串 例如:NSString *s20 = @"hello";//这整简单的创建就是创建的不可变字符串 NSM...

《C++primer(第五版)》学习之路-第三章:字符串、向量和数组

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】 3.1 命名空间using声明 1.有了using声明就无须专门的前缀(形...

PHP之【变量的数据类型(重点是字符串和数组)】

标量类型(基本类型) 标量类型 类型 描述 整数型 -2^31~2^31-1 浮点型 存放整数和小数 布尔型 False 和 True 字符串型  双引号字符串 和单 引号...

引用字符串时 指针和数组的比较

   C语言在引用一个字符串时有两种比较常见的方式:数组和指针。    char c[6]={"hello"};   char *c = "hello";    C语言中数组和指针“几乎”可以近似,《...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法 Tricks(一)—— 字符串和数组的翻转
举报原因:
原因补充:

(最多只允许输入30个字)