0
点赞
收藏
分享

微信扫一扫

目标检测——监控下的汽车

君心浅语 04-05 10:00 阅读 1

一、题目

二、思路及代码
暴力解法是依次往后滑动一位,然后比较窗口内的值。
我这里考虑:窗口每次往后移动一位,那么如果当前窗口的最大值max在窗口内部,那么再滑动到下一个窗口的时候,窗口内只有最新进来的一个元素没有跟max做过比较,只需要让他俩比较一下即可。通过这种方式能比暴力比较节省一点时间。

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param num int整型vector
     * @param size int整型
     * @return int整型vector
     */
    vector<int> maxInWindows(vector<int>& num, int size) {
        // write code here
        int i = 0;
        int p = -1; //当前窗口中最大值所在的下标
        int max = -10003;
        vector<int> ans;
        if(size==0) return ans;
        for (i = 0; i < num.size() - size+1; i++) {
            int n=i+size-1;
            //如果窗口往后滑动一位,p还在窗口内,那么只需要再跟新进窗口的那个值比较一下就可以了
            if (p >= i && p < n) {
                if (max < num[n]) {
                    max = num[n];
                    p = n;
                }
            } else {
                max=num[i];
                for (int j = i+1; j < i+size; j++) {
                    if (num[j] > max) {
                        max = num[j];
                        p = j;
                    }
                }
            }
            ans.push_back(max);
        }
        return ans;
    }
};
举报

相关推荐

0 条评论