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

广州黄埔做网站020网站开发多少钱

广州黄埔做网站,020网站开发多少钱,wordpress登录缓存,航空总医院医院网站建设招标网站关于单调栈的顺序总结: 寻找右边第一个比我大的:从左到右遍历,栈单调递减 寻找左边第一个比我小的:从左到右遍历,栈单调递增 寻找右边第一个比我小的:从右到左遍历,栈单调递增 寻找左边第一个比…

关于单调栈的顺序总结: 

寻找右边第一个比我大的:从左到右遍历,栈单调递减
寻找左边第一个比我小的:从左到右遍历,栈单调递增
寻找右边第一个比我小的:从右到左遍历,栈单调递增
寻找左边第一个比我大的:从右到左遍历,栈单调递减

找哪边的就从哪边遍历(需要优先处理边界),找小的就单调递增(栈底小栈顶大);找大的就单调递减(栈底大栈顶小)。汉诺塔

遇到相同的元素,更新栈内下标,就是将栈里元素(旧下标)弹出,将新元素(新下标)加入栈中。

例如 5 5 1 3 这种情况。如果添加第二个5的时候就应该将第一个5的下标弹出,把第二个5添加到栈中。





leetcode-739-每日温度

单调栈:当要入栈元素大于栈顶元素时,更新栈顶元素中res的值,并将栈顶元素移除

               当要入栈元素小于栈顶元素时,直接入栈

判别是否需要使用单调栈,如果需要找到左边或者右边第一个比当前位置的数大或者小,则可以考虑使用单调栈

模拟过程:

当i = 0时,单调栈为空,将0进栈

        stack = { 0(73) }

        ans = {0,0,0,0,0,0,0,0}

当i = 1时,由于74大于73,因此移除栈顶元素0,赋值ans[0] = 1-0,将1入栈

        stack = { 1(74) }

        ans = {1,0,0,0,0,0,0,0}

当i = 2时,由于75大于74,因此移除栈顶元素1,赋值ans[1] = 2-1,将2入栈

        stack = { 2(75) }

        ans = {1,1,0,0,0,0,0,0}

当i = 3时,由于71小于75,将3入栈

        stack = { 2(75),3(71) }

        ans = {1,1,0,0,0,0,0,0}

当i = 4时,由于69小于71,将4入栈

        stack = { 2(75),3(71) ,4(69)}

        ans = {1,1,0,0,0,0,0,0}

当i = 5时,由于72大于69和71,因此依次移除栈顶元素4和3,赋值ans[4] = 5-4 和 ans[3] = 5-3,将5入栈

        stack = { 2(75) ,5(72)}

        ans = {1,1,0,2,1,0,0,0}

当i = 6时,由于76大于72和75,因此依次移除栈顶元素5和2,赋值ans[5] = 6-5 和 ans[2] = 6-2,将6入栈

        stack = { 6(76) }

        ans = {1,1,0,2,1,1,0,0}

当i = 7时,由于73小于76,将7入栈

        stack = {6(76),7(73)}

        ans = {1,1,4,2,1,1,0,0}

typedef struct stkNode{int val;int index;
}stkNode;stkNode* getNode(int val, int i){stkNode* node = (stkNode*)malloc(sizeof(stkNode));node->val = val;node->index = i;return node;
}int* dailyTemperatures(int* temperatures, int temperaturesSize, int* returnSize) {stkNode** stk = (stkNode**)malloc(sizeof(stkNode*)*temperaturesSize);int stk_top = 0;int* res = (int*)malloc(sizeof(int)*temperaturesSize);memset(res,0,sizeof(int)*temperaturesSize);for(int i = 0 ; i < temperaturesSize ; i++){stkNode* node = getNode(temperatures[i],i);while(stk_top > 0 && temperatures[i] > stk[stk_top-1]->val){stk_top--;int k = stk[stk_top]->index;res[k] = i-k;}stk[stk_top++] = node;}*returnSize = temperaturesSize;return res;
}

leetcode-496-下一个更大元素I

typedef struct stkNode {int val;int index;
}stkNode;stkNode* getNode(int val, int index) {stkNode* node = (stkNode*)malloc(sizeof(stkNode));node->val = val;node->index = index;return node;
}int* nextGreaterElement(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {stkNode* stk[1000];int stk_top = 0;int next[nums2Size];for(int i = 0 ; i < nums2Size ; i++){next[i] = 0;}for (int i = 0; i < nums2Size; i++) {stkNode* node = getNode(nums2[i], i);while (stk_top > 0 && nums2[i] > stk[stk_top - 1]->val) {stk_top--;int k = stk[stk_top]->index;next[k] = nums2[i];}stk[stk_top++] = node;}int* res = (int*)malloc(sizeof(int)*nums1Size);*returnSize = nums1Size;for(int i = 0 ; i < nums1Size ; i++){res[i] = 0;}for (int i = 0; i < nums1Size; i++) {for (int j = 0; j < nums2Size; j++) {if (nums1[i] == nums2[j]) {res[i] = next[j];}}if (res[i] == 0) {res[i] = -1;}}return res;
}

leetcode-503-下一个更大元素II

将循环数组拉直,前n-1个元素复制到数组末尾

int* nextGreaterElements(int* nums, int numsSize, int* returnSize) {*returnSize = numsSize;if(numsSize == 0)return NULL;int* res = (int*)malloc(sizeof(int)*numsSize);memset(res,-1,sizeof(int)*numsSize);int stk[2*numsSize-1];int stk_top = 0;for(int i = 0 ; i < 2*numsSize-1 ; i++){while(stk_top > 0 && nums[i%numsSize] > nums[stk[stk_top-1]]){stk_top--;res[stk[stk_top]] = nums[i%numsSize];}stk[stk_top++] = i%numsSize;}return res;
}

leetcode-42-接雨水

1.双指针

列4 左侧最高的柱子是列3,高度为2。

列4 右侧最高的柱子是列7,高度为3。

列4 柱子的高度为1(以下用height表示)

那么列4的雨水高度为 列3和列7的高度最小值减列4高度,即: min(lHeight, rHeight) - height。列4的雨水高度求出来了,宽度为1,相乘就是列4的雨水体积了。

一样的方法,只要从头遍历一遍所有的列,然后求出每一列雨水的体积,相加之后就是总雨水的体积了。

首先从头遍历所有的列,并且要注意第一个柱子和最后一个柱子不接雨水

当前列雨水面积:min(左边柱子的最高高度,记录右边柱子的最高高度) - 当前柱子高度。

为了得到两边的最高高度,使用了双指针来遍历

当前位置,左边的最高高度是前一个位置的左边最高高度和本高度的最大值。

即从左向右遍历:maxLeft[i] = max(height[i], maxLeft[i - 1]);

从右向左遍历:maxRight[i] = max(height[i], maxRight[i + 1]);

int trap(int* height, int heightSize) {int maxLeft[heightSize];int maxRight[heightSize];maxLeft[0] = height[0];maxRight[heightSize-1] = height[heightSize-1];for(int i = 1 ; i < heightSize ; i++){maxLeft[i] = fmax(height[i],maxLeft[i-1]);}for(int i = heightSize-2 ; i >= 0 ; i--){maxRight[i] = fmax(height[i],maxRight[i+1]);}int area = 0;for(int i = 1 ; i < heightSize-1 ; i++){int high = fmin(maxLeft[i],maxRight[i])-height[i];area += high;}return area;
}

单调栈

int trap(int* height, int heightSize) {if(heightSize == 0)return 0;int ans = 0;int stk[heightSize];int top = 0;for(int i = 0 ; i < heightSize ; i++){while(top && height[i] > height[stk[top-1]]){int stk_top = stk[--top];if(!top){break;}int left = stk[top-1];int curWidth = i-left-1;int curHeight = fmin(height[left],height[i]) - height[stk_top];ans += curWidth*curHeight;}stk[top++] = i;}return ans;
}

leetcode-84-柱状图中最大的矩形

首先我们枚举某一根柱子 i 作为高 h=heights[i];

随后我们需要进行向左右两边扩展,使得扩展到的柱子的高度均不小于 h。换句话说,我们需要找到左右两侧最近的高度小于 h 的柱子,这样这两根柱子之间(不包括其本身)的所有柱子高度均不小于 h,并且就是 i 能够扩展到的最远范围。 


文章转载自:

http://YL9Q13da.rnqbn.cn
http://XkOiQjMd.rnqbn.cn
http://qbQjjVPo.rnqbn.cn
http://Vnq7TWWz.rnqbn.cn
http://GGjjGSOB.rnqbn.cn
http://R3gbkxcU.rnqbn.cn
http://8fYETB9D.rnqbn.cn
http://Ncs9F4pT.rnqbn.cn
http://yr8TTNoP.rnqbn.cn
http://bU0ciwhE.rnqbn.cn
http://ih5Ubr69.rnqbn.cn
http://7xNWTogB.rnqbn.cn
http://GxWnx7Ou.rnqbn.cn
http://6fFuG954.rnqbn.cn
http://vefEYeHA.rnqbn.cn
http://qWRRf7dH.rnqbn.cn
http://oaUMZIrc.rnqbn.cn
http://j301a4sx.rnqbn.cn
http://7TxkHHzi.rnqbn.cn
http://hET30oOu.rnqbn.cn
http://2ToqqTac.rnqbn.cn
http://QxZw4TBT.rnqbn.cn
http://OuhdMarN.rnqbn.cn
http://fCvIVyOj.rnqbn.cn
http://qRXQvh60.rnqbn.cn
http://UdF3CdiZ.rnqbn.cn
http://Ui1KPcn7.rnqbn.cn
http://eHS7tnON.rnqbn.cn
http://aUr4mpN2.rnqbn.cn
http://2YWsvyEr.rnqbn.cn
http://www.dtcms.com/wzjs/780300.html

相关文章:

  • 如何使网站做的更好wordpress怎么仿站
  • 贷款做网站三星网上商城官网app下载
  • 石家庄市住房建设局网站域名审核怎么做返利网站
  • 做搞笑图片的网站做外贸的网站有哪些
  • 手机网站开发有前途南宁网站制作最新招聘信息
  • 阿里备案成功后怎么做网站北京企业网站建设费用
  • 办公用品网站建设山东食品行业网站模板
  • 网站开发实训设计报告潍坊网站建设SEO优化
  • 网站建设完工报告兴化住房和城乡建设局网站
  • 龙元建设陕西公司网站网站建设运营协议
  • 网站开发的形式有( )怎么样查看网站开发语言
  • 苏州网站建设 公司在线制作印章diy印章
  • 合肥需要做网站的公司企业网站名是什么意思
  • 阿里网站建设方案书dw做网站时怎么改为绝对路径
  • 网站开发国外研究状况校园网站建设整改建议
  • 天津网站设计 河西网站开发建设成本
  • 哪些网站discuz做的设置网站建设方案
  • 网站制作哪家专业扬中网站建设推广
  • 湖南城乡住房建设厅网站山西公司注册网上核名
  • 备案中网站名称app界面设计风格有哪些
  • 站群是什么意思什么是网络营销的出发点
  • 重点实验室网站建设的研究现状阿里巴巴电脑版
  • 商洛网站设计机票搜索量
  • 浙江省建设工程质量安全协会网站杨邦胜酒店设计公司官网
  • 百度网站的设计风格电商网站开发面试题
  • 东营网站建设app开发wordpress提速
  • 虚拟云主机wordpressseo怎么发布外链
  • 网站首页没排名但内页有排名在百度上做个网站需要多少钱
  • 买空间去哪个网站网站建设基本范例
  • 有域名了怎么做网站沈阳专业网站制作