最大下标距离
来源:互联网 发布:windows正版价格 编辑:程序博客网 时间:2024/06/03 12:28
问题:给定一个整型数组,找出最大下标距离j-i,当且仅当A[i]<A[j]和i<j。
时间复杂度O(n) OC算法实现:
/** 5 */#import <Foundation/Foundation.h>typedef void (^complete)(int smallIndex, int bigIndex); //小下标 大下标typedef void (^failed)();@interface MaxIndexDistance : NSObject- (int)maxIndexDistancev1:(NSArray *)dataArr;@end
#import "MaxIndexDistance.h"@implementation MaxIndexDistance- (int)maxIndexDistancev1:(NSArray *)dataArr{ if (dataArr == nil ||dataArr.count < 2) { return 0; } //记录下降序列 NSMutableArray *inDescSeq = [NSMutableArray array]; int min = [dataArr[0] intValue]; [inDescSeq addObject:[NSNumber numberWithBool:YES]]; for (int i = 1; i < dataArr.count; i++) { if ([dataArr[i] intValue]<min) { [inDescSeq addObject:[NSNumber numberWithBool:YES]]; min = [dataArr[i] intValue]; } else { [inDescSeq addObject:[NSNumber numberWithBool:NO]]; } } int maxDist = 0; NSInteger i = dataArr.count-1; NSInteger j = dataArr.count-1; while (i>=0) { //倒序找出下降序列index if ([inDescSeq[i] boolValue] == false) { i--; continue; } //从后往前 如果A[i]>=A[j] 指针前移 while ((dataArr[i]>=dataArr[j]) && (j>i)) { j--; } if ((j-i)>maxDist) { maxDist = (int)(j-i); } //取得最大下标距离 下降序列指针前移 i--; } return maxDist;}@end
0 0
- 最大下标距离
- 最大下标距离
- 最大下标距离
- 最大下标距离
- 算法练习:最大下标距离
- 最大下标距离(算法)
- 面试:数组:最大下标距离
- 最大距离
- 最大距离
- 最大距离
- 凸多边形间最大距离
- 1597最大距离
- 二叉树最大距离
- Poj2187 凸包求最大距离
- 最大子段和及其下标
- 一维数组求最大及下标
- 【最大曼哈顿距离】POJ2926 Requirements
- 求树中节点的最大距离
- spring-guide之spring-jdbc
- 浅谈微信公众号营销背后的技术
- Leetcode 48. Rotate Image (Medium) (java)
- 习题2--注释和#符号
- 北大机试最小生成树
- 最大下标距离
- <理解共享信道访问协议系列1>共享信道前世今生
- const与define的异同
- 分享一个Andriod Base类
- 习题3--数字与数学计算
- [Android知识体系]之四大组件:service(intentService)
- 最牛X的GCC 内联汇编
- 跳出“画地为牢”的陷阱:更加明智地规划职业发展
- NEXTDAY 封装思想