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

    代码解释

  • 初始化指针:使用两个指针分别指向两个数组的起始位置。
  • 比较元素:在两个数组中找到较小的元素,并交换它们的位置。
  • 处理完毕:当其中一个数组处理完毕后,确定中位数的位置并返回相应的值。
  • 返回中位数:根据中位数的位置返回中位数值,若中位数位于两个数之间,则返回两数的平均值。
  • 通过这种方法,可以高效地找到两个有序数组的中位数。

    上一篇:Objective-C实现求两点间距离(附完整源码)
    下一篇:Objective-C实现求一组数字的平均值算法(附完整源码)

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年04月17日 04时39分24秒

    关于作者

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

    推荐文章