zoukankan      html  css  js  c++  java
  • 滑动窗口的中位数

    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()方法,算是有点投机取巧。下次单独总结一下排序算法。

  • 相关阅读:
    超市名词解释
    卖功能?买利益?还是买价值?
    店长如何防止顾客外流
    生鲜在卖场中的六大类别
    卖场商品ABCD分类原则
    零售业常用的数字管理公式及其意义
    零售店的利润类型分析
    把握好生鲜经营的关键因素
    常见的心理定位套路
    [转]New .Net三层架构
  • 原文地址:https://www.cnblogs.com/yh2015/p/7301019.html
Copyright © 2011-2022 走看看