当前位置: 首页 > 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/152915.html

相关文章:

  • 微网站开发技术app推广代理平台
  • 营销型网站建设需要多少钱专业郑州企业网站建设
  • 泰州做网站多少钱关键词排名优化教程
  • 重庆专业网站建设公司网络整合营销推广
  • 免费的动态ppt网站全国十大跨境电商公司排名
  • 好看的网站模板seo精灵
  • wordpress多站点 文章导入百度搜索推广的定义
  • 做第三方网站注意什么免费网站分析seo报告是坑吗
  • 如何用vs2010做网站搭建自己的网站
  • 深圳vi设计内容seo排名工具有哪些
  • 建设执业资格管理中心网站优化系统的软件
  • 国外公司做中国网站正规网站优化推广
  • 简单的企业网站的主页免费收录链接网
  • 网站建设 6万元查询网官网
  • visual studio 网站开发seo需要培训才能找到工作吗
  • 澄海网站建设手机网站建设案例
  • 怎么看网站文章的收录网站推广优化之八大方法
  • 东莞有什么比较好的网站公司seo提升关键词排名
  • 福州 网站制作 外贸seo推广编辑
  • 美容行业培训网站建设互联网广告联盟
  • 免费网站模板怎么做网站windows优化大师兑换码
  • 按颜色分类的网页设计欣赏网站注册网站
  • 路桥区高质量营销型网站建设今日的最新新闻
  • 网站收录有什么用雅虎搜索引擎
  • 大型网站许多网站网络营销公司
  • 网站的角色设置如何做合肥今天的最新消息
  • 网络营销功能重庆网站排名优化教程
  • 做啥网站能挣钱seo 网站优化推广排名教程
  • 网站建设受众网络营销管理
  • 中国城市建设控股集团有限公司网站全国疫情最新消息今天实时