标签:else 滑动 bre enum 描述 win 代码 个数 异常
2017年8月7日 19:46:26
难度:困难
描述:给定一个包含 n 个整数的数组,和一个大小为 k 的滑动窗口,从左到右在数组中滑动这个窗口,找到数组中每个窗口内的中位数。(如果数组个数是偶数,则在该窗口排序数字后,返回第 N/2 个数字。)
样例:
对于数组 [1,2,7,8,5], 滑动大小 k = 3 的窗口时,返回 [2,7,7]
最初,窗口的数组是这样的:
[ | 1,2,7 | ,8,5] , 返回中位数 2;
接着,窗口继续向前滑动一次。
[1, | 2,7,8 | ,5], 返回中位数 7;
接着,窗口继续向前滑动一次。
[1,2, | 7,8,5 | ], 返回中位数 7;
代码:
class Solution
{
public List<int> MedianSlidingWindow(int[] nums, int k)
{
List<int> final = new List<int>();
for (int i = 0; i < nums.Length; i++)
{
List<int> list = new List<int>();
for(int j=i;j<k+i;j++)
{
try
{
list.Add(nums[j]);
}
catch (Exception)//捕获到异常说明剩余的数字不够k个
{
break;
}
}
if (list.Count == k)
final.Add(GetMiddleNum(list));
else
break;
}
return final;
}
public int GetMiddleNum(List<int> list)//获取中位数
{
list.Sort();
if (list.Count % 2 != 0)
return list[list.Count/2];
else
return (list[list.Count/2 ] + list[list.Count/2 - 1]) / 2;
}
}
今天和昨天的题目中都遇到了关于排序的问题,但是我都用了List<T>的Sort()方法,算是有点投机取巧。下次单独总结一下排序算法。
标签:else 滑动 bre enum 描述 win 代码 个数 异常
原文地址:http://www.cnblogs.com/yh2015/p/7301019.html