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

网站关键词排名分析网站运营团队

网站关键词排名分析,网站运营团队,深圳企业网站制作设计,wordpress文章内容标签做关键词原理 单调栈的核心原理是:在栈内保持元素的单调性(递增或递减) 单调递增栈: 用于处理“下一个更小的元素”问题。当新元素比栈顶元素小或等于时,直接入栈;否则,一直从栈顶弹出元素&#xff0c…

原理

单调栈的核心原理是:在栈内保持元素的单调性(递增或递减)

单调递增栈

用于处理“下一个更小的元素”问题。当新元素比栈顶元素小或等于时,直接入栈;否则,一直从栈顶弹出元素,直到栈顶元素小于新元素或栈为空。

单调递减栈:

用于处理“下一个更大的元素”问题。当新元素比栈顶元素大时,一直从栈顶弹出元素,直到栈顶元素大于新元素或栈为空,然后将新元素入栈。

核心代码框架

#include <vector>
#include <stack>
using namespace std;vector<int> nextGreaterElement(vector<int>& nums) {int n = nums.size();vector<int> res(n, -1);  // 默认值为-1,表示没有找到stack<int> stk;          // 用于存储元素索引的单调栈for (int i = 0; i < n; i++) {// 维护栈的单调递减性while (!stk.empty() && nums[stk.top()] < nums[i]) {int idx = stk.top(); // 栈顶元素索引stk.pop();res[idx] = nums[i]; // 找到了下一个更大的元素}stk.push(i); // 入栈当前元素索引}return res;
}

739. 每日温度

在这里插入图片描述

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {int n = temperatures.size();vector<int> res(n,0);stack<int>stk;for(int i = 0;i<n;i++){// 递增while(!stk.empty() && temperatures[stk.top()]<temperatures[i]){int index = stk.top(); // 栈顶元素stk.pop();res[index] = i-index;//res[index] = temperatures[i];}stk.push(i);}for(int i = 0;i<n;i++){cout<<res[i]<<endl;}return res;}
};

496.下一个更大元素 I

在这里插入图片描述
思路:暴力法

直接足步循环
先找到和 nums1 对应的 nums2 数,找到后,在循环找更大的,找到就退出

class Solution {
public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {int n = nums1.size();int m = nums2.size();vector<int> res (n,-1); // -1代表没找到stack<int>stk;for(int i = 0;i<n;i++){int j = 0;while(nums1[i] != nums2[j]){j++;}for(int k = j+1; k<m;k++){if(nums2[k]>nums1[i]){res[i] = nums2[k];break;}}}return res;}
};

思路二:单调栈

我们可以先对 nums2 进行单调栈,找到他每个元素的的下一个更大的数
再根据 nums1 创建数组

class Solution {
public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {int n = nums1.size();int m = nums2.size();unordered_map<int, int> nxetnum;vector<int> res (n,-1); // -1代表没找到stack<int>stk;// 遍历 nums2for(int num : nums2){while(!stk.empty()&& stk.top()<num){nxetnum[stk.top()] = num;stk.pop();}stk.push(num);}// 如果没有更大元素,则对应结果为 -1;while(!stk.empty()){nxetnum[stk.top()] = -1;stk.pop();}// 从nums1 中查找对应的;for(int i = 0;i<n;i++){res[i] = nxetnum[nums1[i]];}return res;}
};

503.下一个更大元素II

在这里插入图片描述
思路:

因为可以循环,直接将数组进行拼接,这样就破解循环问题了,就如同前面的每日温度问题了

class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {int n = nums.size();vector<int>realnums;// 暴力拼接for(int i = 0; i<2;i++){for(int num:nums){realnums.push_back(num);}}vector<int> res(2*n,-1);stack<int>stk;for(int i = 0;i<realnums.size();i++){while(!stk.empty() && realnums[stk.top()]<realnums[i]){int index = stk.top();stk.pop();res[index] = realnums[i];}stk.push(i);}vector<int>resnum;resnum.insert(resnum.end(),res.begin(),res.begin()+n);return resnum;}
};

代码优化一下:

class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {int n = nums.size();vector<int>realnums(n,-1);stack<int>stk;for(int i = 0 ;i<2*n;i++){int num = nums[i % n];while(!stk.empty() && nums[stk.top()] <num){int index = stk.top();stk.pop();realnums[index]  = num;}if(i<n){stk.push(i);}}return realnums;}
};
http://www.yayakq.cn/news/879658/

相关文章:

  • 宿舍管理网站建设贵州建筑人才网
  • wordpress新建页面有什么作用深圳快速seo排名优化
  • 著名网站织梦域名查询官网
  • 网站建设高端手机网页游戏排行榜前十名
  • 别人恶意点击我们竞价网站网站销售流程
  • 网站建设服务 行业代码江苏网站建设公司排名
  • 网站网页?问?上海专业网站建站品牌
  • 网站建设科目wordpress类目权限
  • 沁阳企业自助建站网站建设 客户定位
  • 网站做盗版视频赚钱吗跨境电商快递怎么发到国外
  • 免费asp网站后台管理系统创网
  • 国外家具设计网站阜阳市城乡建设网站
  • 安顺北京网站建设朋友圈广告推广平台
  • 山西网站开发建设一般网站建设需求有哪些
  • 天河做网站要多少钱英文wordpress SEO
  • 济宁网站建设 智雅wordpress 无法添加媒体
  • 哪个公司的app软件定制长沙推广优化公司
  • 宁波网站建设制作公司排名界首做网站
  • 做塑料哪个网站好卖文具做网站好还是做电商好
  • 网站首页的名字通常是做网站的费用记哪个会计科目
  • 海口可信的海南网站建设沧浪设计网站公司
  • 建设银行网站登录不上广州网络推广公司有哪些
  • 在哪家网站做外贸比较好网站做系统下载
  • 网站建设汇报方案ppt模板德州鲁企动力网站优化中心
  • 前端工程师是做网站网站建设有几块
  • 重庆哪里做网站定制网站建设的释义
  • 鹿泉微信网站建设网站域名com和cn的差别在哪里
  • 网站建站 宝网站建设信息表
  • 学院网站的作用重庆十大房地产公司
  • 北京网站设计制作教程wordpress链接自定义后文章打不开