# 中位数
# 难度:简单
# 描述:
给定一个未排序的整数数组,找到其中位数。
中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第 N/2 个数。
# 样例:
给出数组[4, 5, 1, 2, 3], 返回 3
给出数组[7, 9, 4, 5],返回 5
# 思路分析:
- 升序排序数组
- 模拟几个数组的返回值,找到里面的规律,找出数组中对应元素。
# 代码模板:
/**
* @param nums: A list of integers
* @return: An integer denotes the middle number of the array
*/
const median = function(nums) {};
1
2
3
4
5
2
3
4
5
# 想一想再看答案
# 想一想再看答案
# 想一想再看答案
# 代码:
- 判断奇数偶数,找到对应的下标
/**
* @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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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((v1, v2) => v1 - v2);
return nums[Math.ceil(nums.length / 2) - 1]; //
};
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8