
Objective-C实现求两个数组的中位数算法(附完整源码)
初始化两个指针,分别指向两个数组的起始位置。 在两个数组中找到较小的元素,并将其作为当前中位数。 交换两个数组中当前位置的元素。 重复上述步骤,直到处理完其中一个数组。 最后,确定中位数的位置并返回相应的值。 初始化指针:使用两个指针分别指向两个数组的起始位置。 比较元素:在两个数组中找到较小的元素,并交换它们的位置。 处理完毕:当其中一个数组处理完毕后,确定中位数的位置并返回相应的值。 返回中位数:根据中位数的位置返回中位数值,若中位数位于两个数之间,则返回两数的平均值。
发布日期:2025-04-26 08:49:51
浏览次数:5
分类:精选文章
本文共 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
代码解释
通过这种方法,可以高效地找到两个有序数组的中位数。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月17日 04时39分24秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!