首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在NSArray中找到NSNumbers的中值?

在NSArray中找到NSNumbers的中值,可以使用以下方法:

  1. 使用KVC(Key-Value Coding)方法
代码语言:objc
复制
[array valueForKeyPath:@"@median.self"];
  1. 使用NSMethodSignature方法
代码语言:objc
复制
NSMethodSignature *signature = [array methodSignatureForSelector:@selector(median)];
NSInteger median = [signature median];
  1. 实现一个方法来计算中值
代码语言:objc
复制
@implementation NSNumber (Median)

- (double)median {
    NSUInteger count = [self count];
    if (count == 0) {
        return 0;
    }
    NSUInteger middle = count / 2;
    NSUInteger lower = 0;
    NSUInteger upper = count - 1;
    while (lower < upper) {
        NSUInteger mid = (lower + upper) / 2;
        NSUInteger countMid = [self countBetween:lower and:mid];
        NSUInteger countHigher = [self countBetween:mid and:upper];
        if (countMid < countHigher) {
            lower = mid + 1;
        } else {
            upper = mid;
        }
    }
    return (double)lower + (double)count / 2;
}

@end
  1. 使用上述方法获取中值
代码语言:objc
复制
NSNumber *medianNumber = [array median];
double median = [medianNumber doubleValue];

以上方法中,方法1和方法2可以快速找到中值,但需要遍历数组,时间复杂度为O(n)。方法3可以实现较高效的中值计算,时间复杂度为O(1),但需要实现一个方法。方法4是直接使用NSNumber的实例方法获取中值,简单高效,但需要先遍历数组获取NSNumber对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券