数组旋转

来源:互联网 发布:sopcast网络电视节目源 编辑:程序博客网 时间:2024/05/18 01:48

问题:返回将一维数组向右旋转k个位置的结果。比如,一维数组{1,2,3,4,5},k=2时,返回结果为{4,5,1,2,3}。要求常量级空间复杂度,允许修改原数组。

OC算法实现:

/** 4 */#import <Foundation/Foundation.h>@interface RotateK : NSObject- (NSMutableArray *)rotateK:(NSMutableArray *)dataArr k:(int)k;@end

#import "RotateK.h"@implementation RotateK- (NSMutableArray *)rotateK:(NSMutableArray *)dataArr k:(int)k{    if (dataArr == nil || dataArr.count == 0 || k>dataArr.count) {        return dataArr;    }        /**     1、翻转整个数组     2、翻转前k个     3、翻转剩余个     */    [self reverse:dataArr start:0 end:(int)dataArr.count-1];    [self reverse:dataArr start:0 end:k-1];    [self reverse:dataArr start:k end:(int)dataArr.count-1];    return dataArr;}- (NSMutableArray *)reverse:(NSMutableArray *)arr start:(int)start end:(int)end{    while (start < end) {        NSNumber *temp = arr[start];        arr[start] = arr[end];        arr[end] = temp;        start++;        end--;    }    return arr;}@end


0 0
原创粉丝点击