本文共 1508 字,大约阅读时间需要 5 分钟。
Objective-C 实现两个有序数组的中位数算法
问题描述
寻找两个有序数组的中位数是一个经典的算法问题。通过合并两个有序数组,可以有效地找到它们的中位数。算法思路
为了实现这个目标,我们可以采用合并两个数组的方法。具体步骤如下:代码实现
以下是Objective-C中实现该算法的完整源码:#import@interface ObjectiveCAlgorithm : NSObject { NSArray *nums1; NSArray *nums2;}@property (nonatomic, strong) NSArray *nums1;@property (nonatomic, strong) NSArray *nums2;- (double)findMedianSortedArrays:(NSArray *)nums1 :(NSArray *)nums2; @end @implementation ObjectiveCAlgorithm - (double)findMedianSortedArrays:(NSArray *)nums1 :(NSArray *)nums2 { int m = nums1.count; int n = nums2.count; int i = 0, j = 0; int k = 0; while (i < m && j < n) { if (nums1[i].doubleValue < nums2[j].doubleValue) { [nums1 exchangeObjectAtIndex:i withAtIndex:j]; i++; } else { [nums2 exchangeObjectAtIndex:j withAtIndex:k]; j++; } k++; } if (m > n) { [nums1 exchangeObjectAtIndex:i withAtIndex:j]; i++; } else { [nums2 exchangeObjectAtIndex:j withAtIndex:k]; j++; } int medianIndex = k; if (medianIndex % 2 == 1) { return nums1[medianIndex / 2].doubleValue; } else { double a = nums1[(medianIndex - 1) / 2].doubleValue; double b = nums1[medianIndex / 2].doubleValue; return (a + b) / 2.0; } } @end
代码解释
通过这种方法,可以高效地找到两个有序数组的中位数。
转载地址:http://zwsfk.baihongyu.com/