80题 Median中位数

这篇博客介绍了一个Java实现的算法,用于在未排序的整数数组中找到中位数。通过先对数组进行排序,然后根据数组长度的奇偶性返回中间元素,实现了中位数的查找。该算法适用于数据量较小的情况,对于大型数据集可能需要更高效的方法,如快速选择或堆排序。

Median中位数

Description
Given a unsorted array with integers, find the median of it.

A median is the middle number of the array after it is sorted.

If there are even numbers in the array, return the N/2-th number after sorted.

public class Solution {
    /**
     * @param nums: A list of integers
     * @return: An integer denotes the middle number of the array
     */
    public int median(int[] nums) {
        // write your code here
        Arrays.sort(nums) ;
        int len = nums.length ;
        if(len % 2 == 0){
            return  nums[len / 2 - 1] ;
        }else{
            return nums[(len-1) / 2] ;
        }
    }
}
好的,关于PTA平台上的“求中位数”这一类型的函数目,可以为你详细讲解一下。 ### 目概述 在许多编程练习平台上,“求中位数”的问是常见的算法之一。通常会给出一组数据,要求编写程序计算这组数据的中位数中位数是指将一组数值按大小顺序排列后处于中间位置的那个值;如果数值总数是偶数,则取中间两个数的平均值作为中位数。 #### 示例说明: 假设输入数组为 `[7, 5, 3, 1]`,排序后的结果为 `[1, 3, 5, 7]` ,由于有四个元素所以返回 (3 + 5) / 2 = 4.0; 若给定的是奇数长度如 [8,6,9], 排序得到[6,8,9], 直接选取最中间即index=1处元素8作为答案。 ### 编程思路分析 **步骤一:获取并存储用户提供的所有数字** 首先需要设计一个合适的数据结构来保存从标准输入读入的一系列整型或浮点型数据项,并考虑边界情况例如空集处理等。 ```python numbers = [] n = int(input()) # 获取列表长度 for _ in range(n): numbers.append(float(input())) # 根据实际情况调整是否转换成float类型 ``` **步骤二:对上述获得到的所有数字按照升序规则实施排序操作** 这里可以直接利用Python内置sorted()函数完成快速简便地排好序工作。 ```python ordered_numbers = sorted(numbers) ``` **步骤三:依据定义公式确定最终的结果** 判断总共有多少个有效样本(记作'n')然后据此选择不同的输出策略: - 当 'n' 为 奇 数时直接提取下标等于`(n//2)`的那一项即可。 - 若果 ‘n’ 属于 偶 數範疇的话则需分別獲取索引為 `(n // 2 - 1)` 和 `(n // 2)` 的两數再計算其均值作為最終結果。 完整版参考实现(基于 Python 语言): ```python def find_median(num_list): num_list.sort() n = len(num_list) if n % 2 == 1: return round(num_list[n // 2], 1) else: mid_right_index = n // 2 median_value = (num_list[mid_right_index - 1]+num_list[mid_right_index]) / 2 return float('%.1f'%median_value) if __name__=="__main__": nums_count=int(input()) data=[float(input().strip()) for i in range(nums_count)] print(find_median(data)) ``` 以上就是解决这类问的基本框架了。当然,在实际应用过程中还需要考虑到更多细节之处比如异常捕捉、内存优化等方面内容哦!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值