当前位置: 首页 > news >正文

冀州市网站建设html代码下载

冀州市网站建设,html代码下载,网站建设的卖点,网站建设数据库选择滑动窗口的最大值 题目链接 暴力解法 最容易想到的当然还是通过两层循环来暴力求解#xff1a;一层循环用来移动窗口#xff0c;一层循环用来在窗口内找到最大值。这种做法的时间复杂度为O(kN)#xff0c;会超出时间限制#xff0c;因此#xff0c;我们要找到更加高效的…滑动窗口的最大值 题目链接 暴力解法 最容易想到的当然还是通过两层循环来暴力求解一层循环用来移动窗口一层循环用来在窗口内找到最大值。这种做法的时间复杂度为O(kN)会超出时间限制因此我们要找到更加高效的方法。 单调队列 注这种解法建立在单调队列的基础之上而单调队列是双端队列的特殊形式如果对单调队列和双端队列还不太了解建议先看看详解单调队列 由于我们要求的是滑动窗口的最大值那我们不妨先做一个假设如果当前的滑动窗口中有两个下标i和j其中**i 在j的左侧i j并且i对应的元素不大于j对应的元素nums[i] nums[j]**。 那么我们就可以得到这样一个结论只要下标i所代表的元素nums[j]还在窗口中那么下标j所对应的元素nums[j]也一定在窗口中且**nums[i]一定不会是最大值**也就不会对答案造成影响我们也就可以将其直接删除了 也可以用一句话来概括 如果一个数据val要进入窗口那他窗口内所有比它小或等于它的的数都不会对答案造成影响 我们可以用一个队列来存储这些还没有被移除的元素的下标同时确保从队头到队尾这些下标是从小到大排列的保证数据的愿所有顺序而下标所代表的值是递减排列的这样队头元素就是滑动窗口的最大值了。 每当窗口向右滑动一个元素就会有一个新的元素入队。在这个元素入队之前由于我们要确保队列的单调递减性因此当队列不为空并且队尾元素小于或等于新的元素时就要通过循环删除这些不会对结果造成影响的元素最后再把这个元素的下标插入队列。 需要注意当窗口向右滑动时最大值下标会离开窗口永远不会在进入窗口因此在窗口滑动的过程中我们要不断比较队首元素的下标最大值下标和窗口最左侧的标下次移动时离开窗口的元素下标如果离开了窗口就要将队首元素出队。 例如对于上图的示例 实现代码 typedef struct DequeNode {struct DequeNode* next;struct DequeNode* prev;int data; }DQNode;typedef struct Deque {DQNode* front;DQNode* tail; }Deque;void DequeInit(Deque* pq) //双端队列初始化 {assert(pq);pq-front pq-tail NULL; }bool DequeEmpty(Deque* pq) //双端队列判空 {assert(pq);return pq-front NULL; }void DequePushTail(Deque* pq, int val) //队尾入队 {DQNode* newNode (DQNode*)malloc(sizeof(DQNode));newNode-data val;newNode-next NULL;newNode-prev NULL;if (DequeEmpty(pq)){pq-front pq-tail newNode;}else{pq-tail-next newNode;newNode-prev pq-tail;pq-tail newNode;} }void DequePushFront(Deque* pq, int val) //队头入队 {DQNode* newNode (DQNode*)malloc(sizeof(DQNode));newNode-data val;newNode-next NULL;newNode-prev NULL;if (DequeEmpty(pq)){pq-front pq-tail newNode;}else{newNode-next pq-front;pq-front-prev newNode;pq-front newNode;} }int DequePopFront(Deque* pq) //队头出队 {assert(pq);assert(!DequeEmpty(pq));DQNode* temp pq-front;int ret temp-data;pq-front pq-front-next;if (pq-front NULL)pq-tail NULL;elsepq-front-prev NULL;free(temp);return ret; }int DequePopTail(Deque* pq) //队尾出队 {assert(pq);assert(!DequeEmpty(pq));DQNode* temp pq-tail;int ret temp-data;pq-tail pq-tail-prev;if (pq-tail NULL)pq-front NULL;elsepq-tail-next NULL;free(temp);return ret; }int DequeTail(Deque* pq) //取队尾元素 {assert(pq);assert(!DequeEmpty(pq));return pq-tail-data; }int DequeFront(Deque* pq) //取队头元素 {assert(pq);assert(!DequeEmpty(pq));return pq-front-data; }void DequeDestroy(Deque* pq) //销毁双端队列 {while (!DequeEmpty(pq)){DQNode* temp pq-front;pq-front pq-front-next;free(temp);}free(pq); } //-------------------------------------双端队列基本功能实现-----------------------------------------------int* maxSlidingWindow(int* nums, int numsSize, int k, int* returnSize){*returnSize numsSize - k 1;int* ret (int*)malloc(sizeof(int) * (*returnSize));Deque* DQ_Max (Deque*)malloc(sizeof(Deque)); //用来记录最大值下标DequeInit(DQ_Max); //初始化//先将数组前k个入队列构建初始窗口for (int i0; ik; i){//队列不为空且队尾元素小于或等于新元素就将队尾元素删除//确保递减while (!DequeEmpty(DQ_Max) nums[DequeTail(DQ_Max)] nums[i]){DequePopTail(DQ_Max);}DequePushTail (DQ_Max, i); //将下标入队}ret[0] nums[DequeFront(DQ_Max)]; //初始窗口的最大值就是队头下下标所代表的元素//再将后面剩余的元素下标入队for (int ik; inumsSize; i){//删除不在窗口的下标while (!DequeEmpty(DQ_Max) DequeFront(DQ_Max) i - k)DequePopFront(DQ_Max);//队列不为空且队尾元素小于新元素就将队尾元素删除//确保非递增while (!DequeEmpty(DQ_Max) nums[DequeTail(DQ_Max)] nums[i]){DequePopTail(DQ_Max);}DequePushTail (DQ_Max, i);//窗口最大值就是队头下下标所代表的元素ret[i - k 1] nums[DequeFront(DQ_Max)];}//销毁队列释放内存DequeDestroy(DQ_Max);return ret; }
http://www.yutouwan.com/news/366004/

相关文章:

  • 一起做网站女装夏季裙运营的网站
  • 武冈网站建设哪家好工业和信息化部政务服务平台
  • 网站模板带手机站拖拽网站开发
  • 自学网站建设哪个网站好如何找外贸网站建设公司
  • 部门网站建设自查报告南昌集团制作网站公司
  • seo网站优化方案摘要c 微信小程序开发教程
  • 新增域名网站建设方案有关做美食的网站
  • 用网站开发角度去开发一个网站部队门户网站建设方案
  • 建设厂招工信息网站佛山seo关键词
  • 厦门网站开发培训工作心得体会感悟简短
  • 中国建设监理官方网站如何在电脑上建设网站
  • 安居客网站应该如何做上海app软件开发
  • 梧州市网站建设做网站需要实名认证吗
  • 哪个网站买东西最便宜北京的电商平台网站
  • 代做网站微信号手机网站开发有前途
  • 怎样设计手机网站建设网站做搜索要用数据库吗
  • 做期货看啥子网站哪些网站可以找到做海报的素材
  • 网站设计怎么做视频律师建网站
  • 怎么把自己的网站放到百度搜索上企业搭建网站多少钱
  • 上海定制网站建设房地产信息查询网
  • 网站建设 专用术语万网官网4399
  • 沧州好的做网站的公司网站源码生成
  • 网站开发php和c语言区别ppt模板免费下载 素材学生版
  • 优秀定制网站建设案例盘锦网站开发公司
  • 北京工程质量建设协会网站电子商务主要学什么就业方向工资
  • 网站建设教程 零基础西青网站文化建设
  • 手机网站模板使用方法做电影网站的服务器需要多大
  • 儿童主题网站的内容建设专业的o2o网站建设
  • 修改wordpress主页标题百度推广seo
  • 雄安网站建设推广网络营销与直播电商怎么样