两数之和II
来源:互联网 发布:连不上树熊网络 编辑:程序博客网 时间:2024/05/18 10:34
问题:给定一个整型数组,找出其中的两个数使其和为某个指定的值,并返回这两个数的下标,假设数组元素各不相同,要求时间复杂度为O(n),n为数组长度。
OC算法实现:
/** 2 */#import <Foundation/Foundation.h>typedef void (^complete)(int indexX, int indexY); //x下标 y下标typedef void (^failed)();@interface HasSumV1 : NSObject- (void)hasSum:(NSArray *)dataArr sum:(int)sum complete:(complete)complete failed:(failed)failed;@end
#import "HasSumV1.h"@implementation HasSumV1- (void)hasSum:(NSArray *)dataArr sum:(int)sum complete:(complete)complete failed:(failed)failed;{ //将数组元素index和value存储于一个Map中 数组index=>Map value,数组value=>Map key NSMutableDictionary *dataDic = [NSMutableDictionary dictionary]; for (int i = 0;i < dataArr.count; i++) { NSNumber *value = dataArr[i]; //注意 相同的key会被覆盖 所以此程序有局限性 [dataDic setObject:[NSNumber numberWithInt:i] forKey:value]; } for (int i = 0; i < dataArr.count; i++) { //遍历数组 查找Map keys中是否含有目标数据(sum - value[i]) 含有 则获取其其index BOOL contain = [[dataDic allKeys] containsObject:[NSNumber numberWithInt:sum-[dataArr[i] intValue]]]; BOOL equal = sum == 2*[dataArr[i] intValue];//判定无相同的两数 (此处可不做比较 OC MAP特效注定不会有相同的key) if (contain && !equal) { if (complete) { NSNumber *v = [NSNumber numberWithInt:sum-[dataArr[i] intValue]]; complete(i,[[dataDic objectForKey:v] intValue]); return; } } } if (failed) { failed(); }}@end
0 0
- 两数之和II
- Lintcode 两数之和
- 两数之和
- 题目:两数之和
- LintCode 两数之和
- 两数之和
- 两数之和
- 两数之和
- 两数之和
- 两数之和
- 两数之和
- 两数之和I
- 两数之和III
- 两数之和 (一)
- 两数之和
- 两数之和
- 两数之和
- 两数之和
- ToolBar
- WINDOWS下JDK开发环境搭建
- PHP使用gearman扩展完成异步任务总结
- Openvswitch原理与代码分析(6):用户态流表flow table的操作
- Java线程死锁及解决方案
- 两数之和II
- target=_blank的重要性
- 《R语言实战》第一二章节学习笔记
- Invalid component element. Instead of passing a string like 'div', pass React.createElement('div')
- Snax
- 习题1--第一个程序
- 关于Oracle asmlib配置文件中的ORACLEASM_USE_LOGICAL_BLOCK_SIZE参数:
- 《R语言实战》第三章节学习笔记
- JVM内存区域探究