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

广东大唐建设网站佛山网络推广平台

广东大唐建设网站,佛山网络推广平台,wordpress多站点复制,提供网站建设的公司提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 今日学习目标一、算法题1.下一个更大元素 II2.接雨水3.柱状图中最大的矩形 今日心得学习及参考书籍 今日学习目标 下一个更大元素 II(503) …

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 今日学习目标
  • 一、算法题
    • 1.下一个更大元素 II
    • 2.接雨水
    • 3.柱状图中最大的矩形
  • 今日心得
  • 学习及参考书籍


今日学习目标

下一个更大元素 II(503)
接雨水(42)
柱状图中最大的矩形(84)

一、算法题

1.下一个更大元素 II

题目:
给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。

数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1 。

示例 1:

输入: nums = [1,2,1]
输出: [2,-1,2]
解释: 第一个 1 的下一个更大的数是 2;
数字 2 找不到下一个更大的数;
第二个 1 的下一个最大的数需要循环搜索,结果也是 2。

代码:

class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {vector<int> result(nums.size(), -1);if (nums.size() == 0) return result;stack<int> st;st.push(0);for (int i = 1; i < nums.size() * 2; i++) { // 模拟遍历两边nums,注意一下都是用i % nums.size()来操作if (nums[i % nums.size()] < nums[st.top()]) st.push(i % nums.size());else if (nums[i % nums.size()] == nums[st.top()]) st.push(i % nums.size()); else {while (!st.empty() && nums[i % nums.size()] > nums[st.top()]) {result[st.top()] = nums[i % nums.size()];st.pop();}st.push(i % nums.size());}}return result;}
};

2.接雨水

题目:
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:
在这里插入图片描述

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。

代码:

class Solution {
public:int trap(vector<int>& height) {if (height.size() <= 2) return 0; // 可以不加stack<int> st; // 存着下标,计算的时候用下标对应的柱子高度st.push(0);int sum = 0;for (int i = 1; i < height.size(); i++) {if (height[i] < height[st.top()]) {     // 情况一st.push(i);} if (height[i] == height[st.top()]) {  // 情况二st.pop(); // 其实这一句可以不加,效果是一样的,但处理相同的情况的思路却变了。st.push(i);} else {                                // 情况三while (!st.empty() && height[i] > height[st.top()]) { // 注意这里是whileint mid = st.top();st.pop();if (!st.empty()) {int h = min(height[st.top()], height[i]) - height[mid];int w = i - st.top() - 1; // 注意减一,只求中间宽度sum += h * w;}}st.push(i);}}return sum;}
};

3.柱状图中最大的矩形

题目:
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

示例 1:
在这里插入图片描述

输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10

代码:

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int result = 0;stack<int> st;heights.insert(heights.begin(), 0); // 数组头部加入元素0heights.push_back(0); // 数组尾部加入元素0st.push(0);// 第一个元素已经入栈,从下标1开始for (int i = 1; i < heights.size(); i++) {if (heights[i] > heights[st.top()]) { // 情况一st.push(i);} else if (heights[i] == heights[st.top()]) { // 情况二st.pop(); // 这个可以加,可以不加,效果一样,思路不同st.push(i);} else { // 情况三while (!st.empty() && heights[i] < heights[st.top()]) { // 注意是whileint mid = st.top();st.pop();if (!st.empty()) {int left = st.top();int right = i;int w = right - left - 1;int h = heights[mid];result = max(result, w * h);}}st.push(i);}}return result;}
};

今日心得

比想象中的难。

学习及参考书籍

代码随想录

http://www.dtcms.com/wzjs/476598.html

相关文章:

  • 潜江做网站的公司有哪些如何用google搜索产品关键词
  • 广告设计与制作培训机构网站seo教程
  • 什么是企业微信seo营销外包
  • 做网站效果商务软文写作300
  • 网站排名乐云seo国际时事新闻2022最新
  • 吉林做网站多少钱企业推广网
  • html中文网页模板中国seo关键词优化工具
  • 湖南3合1网站建设电话网站策划方案
  • 个人网站如何做移动端职业技能培训学校
  • 做创意ppt网站有哪些方面企业seo顾问服务阿亮
  • 昌吉哪个公司做网站免费搜索引擎推广方法有哪些
  • 做网站 淘宝西安seo外包
  • 公司网站建设费入哪个科目杭州网络排名优化
  • 石家庄微信小程序定制网站seo优化方案设计
  • 自己做网站都要什么手续企业网站的域名是该企业的
  • 简洁个人博客网站模板下载关键词排名优化公司推荐
  • niRvana WordPress主题专业搜索引擎优化电话
  • 青海城乡建设网站创建app平台
  • 创建网站需要备案吗最好的小说网站排名
  • 页面升级紧急通知seo关键词排名怎么优化
  • 大足集团网站建设天津百度优化
  • 千库网登录入口南昌seo优化
  • 江门企业免费建站今年疫情最新消息
  • 做网站什么框架方便西安网络seo公司
  • 俄罗斯最新消息军事seo承诺排名的公司
  • 最棒的网站建设搜索大全引擎入口
  • 创意福州网站建设环球网疫情最新
  • 济南国画网站建设新冠咳嗽怎么办
  • 郑州市做网站的seo交流论坛seo顾问
  • ionic 做网站今天的三个新闻