算法_中位数

中位数

难度:简单

描述:

给定一个未排序的整数数组,找到其中位数。

中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第 N/2 个数。

样例:

给出数组[4, 5, 1, 2, 3], 返回 3

给出数组[7, 9, 4, 5],返回 5

思路分析:

  1. 升序排序数组
  2. 模拟几个数组的返回值,找到里面的规律,找出数组中对应元素。

代码模板:

1
2
3
4
5
/**
* @param nums: A list of integers
* @return: An integer denotes the middle number of the array
*/
const median = function(nums) {};

想一想再看答案

想一想再看答案

想一想再看答案

代码:

  1. 判断奇数偶数,找到对应的下标
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* @param nums: A list of integers
* @return: An integer denotes the middle number of the array
*/
const median = function(nums) {
nums.sort((a, b) => {
return a - b; // 升序排序
});
var num = nums.length; // 保存数组长度
if (num % 2 !== 0) {
// 判断奇数偶数
return nums[(num + 1) / 2 - 1]; // 奇数转偶数
} else {
return nums[num / 2 - 1]; // 减一 对应数组下标
}
};
  1. 奇数上舍入,找到下标

两种写法一样,但无疑第二种写法更为优雅。

1
2
3
4
5
6
7
8
/**
* @param nums: A list of integers
* @return: An integer denotes the middle number of the array
*/
const median = function(nums) {
nums.sort((v1, v2) => v1 - v2);
return nums[Math.ceil(nums.length / 2) - 1]; //
};

鼓励我一下:

觉得还不错的话,给我的点个star

听说,打赏我的人最后都找到了真爱。