欢迎访问广东华体汇叉车设备有限公司官网!

广东华体汇叉车设备有限公司

广东华体汇叉车设备有限公司

—— 持续领航 品牌经营 ——

全国服务热线

061-571427526
13845602650
搜索关键词:  产品样品  搬运坦克车

有点难度 几道和「滑动窗口」有关的算法面试题

来源:华体汇app下载   发布时间:2021-05-29 01:16nbsp;  点击量:

本文摘要:前言科普:什么是滑动窗口算法滑动问题包罗一个滑动窗口,它是一个运行在一个大数组上的子列表,该数组是一个底层元素荟萃。假设有数组 [a b c d e f g h ],一个巨细为 3 的 滑动窗口 在其上滑动,则有:[a b c] [b c d] [c d e] [d e f] [e f g] [f g h]一般情况下就是使用这个窗口在数组的 正当区间 内举行滑动,同时 动态地 记载一些有用的数据,许多情况下,能够极大地提高算法地效率。

华体汇app下载

前言科普:什么是滑动窗口算法滑动问题包罗一个滑动窗口,它是一个运行在一个大数组上的子列表,该数组是一个底层元素荟萃。假设有数组 [a b c d e f g h ],一个巨细为 3 的 滑动窗口 在其上滑动,则有:[a b c] [b c d] [c d e] [d e f] [e f g] [f g h]一般情况下就是使用这个窗口在数组的 正当区间 内举行滑动,同时 动态地 记载一些有用的数据,许多情况下,能够极大地提高算法地效率。

1. 滑动窗口最大值题目泉源于 LeetCode 上第 239 号问题:滑动窗口最大值。题目难度为 Hard,现在通过率为 40.5%。题目形貌 给定一个数组 nums,有一个巨细为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。

你只可以看到在滑动窗口 k 内的数字。滑动窗口每次只向右移动一位。

返回滑动窗口最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3 5] 3 6 7 5 1 3 -1 [-3 5 3] 6 7 5 1 3 -1 -3 [5 3 6] 7 6 1 3 -1 -3 5 [3 6 7] 7题目剖析 使用一个 双端行列,在行列中存储元素在数组中的位置, 而且维持行列的严格递减,,也就说维持队首元素是 **最大的 **,当遍历到一个新元素时, 如果行列里有比当前元素小的,就将其移除行列,以保证行列的递减。当行列元素位置之差大于 k,就将队首元素移除。增补:什么是双端行列(Dqueue) Deque 的寄义是 “double ended queue”,即双端行列,它具有行列和栈的性质的数据结构。

顾名思义,它是一种前端与后端都支持插入和删除操作的行列。Deque 继续自 Queue(行列),它的直接实现有 ArrayDeque、LinkedList 等。动画形貌 动画形貌 Made by Jun Chen代码实现 class Solution { public int[] maxSlidingWindow(int[] nums, int k) { //有点坑,题目里都说了数组不为空,且 k > 0。

可是看了一下,测试用例内里还是有nums = [], k = 0,所以只好加上这个判断 if (nums == null || nums.length < k || k == 0) return new int[0]; int[] res = new int[nums.length - k + 1]; //双端行列 Deque<Integer> deque = new LinkedList<>(); for (int i = 0; i < nums.length; i++) { //在尾部添加元素,并保证左边元素都比尾部大 while (!deque.isEmpty() && nums[deque.getLast()] < nums[i]) { deque.removeLast(); } deque.addLast(i); //在头部移除元素 if (deque.getFirst() == i - k) { deque.removeFirst(); } //输出效果 if (i >= k - 1) { res[i - k + 1] = nums[deque.getFirst()]; } } return res; }}2. 无重复字符的最宗子串题目泉源于 LeetCode 上第 3 号问题:无重复字符的最宗子串。题目难度为 Medium,现在通过率为 29.0%。题目形貌 给定一个字符串,请你找出其中不含有重复字符的 最宗子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最宗子串是 "abc",所以其长度为 3。

题目剖析 建设一个256位巨细的整型数组 freg ,用来建设字符和其泛起位置之间的映射。维护一个滑动窗口,窗口内的都是没有重复的字符,去尽可能的扩大窗口的巨细,窗口不停的向右滑动。(1)如果当前遍历到的字符从未泛起过,那么直接扩大右界限;(2)如果当前遍历到的字符泛起过,则缩小窗口(左边索引向右移动),然后继续视察当前遍历到的字符;(3)重复(1)(2),直到左边索引无法再移动;(4)维护一个效果res,每次用泛起过的窗口巨细来更新效果 res,最后返回 res 获取效果。

动画形貌 动画形貌代码实现 // 滑动窗口// 时间庞大度: O(len(s))// 空间庞大度: O(len(charset))class Solution {public: int lengthOfLongestSubstring(string s) { int freq[256] = {0}; int l = 0, r = -1; //滑动窗口为s[l...r] int res = 0; // 整个循环从 l == 0; r == -1 这个空窗口开始 // 到l == s.size(); r == s.size()-1 这个空窗口停止 // 在每次循环里逐。


本文关键词:有点,难度,几道,和,「,滑动,窗口,」,有关,华体汇,的

本文来源:华体汇-www.educationkyl.com

微信二维码 微信二维码
联系我们

电话:061-571427526
手机:13845602650
Q Q:484707751
邮箱:admin@educationkyl.com
联系地址:河北省张家口市灵石县远平大楼738号

Copyright © 2000-2021 www.educationkyl.com. 华体汇科技 版权所有

备案号:ICP备11841138号-2