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

最好的网站优化公司建网站 域名 空间

最好的网站优化公司,建网站 域名 空间,wordpress首页改颜色,工业设计是机械类还是设计类目录 下一个更大元素II接雨水 LeetCode 503.下一个更大元素II LeetCode 42. 接雨水 下一个更大元素II 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一…

目录

  • 下一个更大元素II
  • 接雨水

LeetCode 503.下一个更大元素II
LeetCode 42. 接雨水

下一个更大元素II

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

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

  • 问题的关键在于在遍历的过程中模拟走了两遍 nums
class Solution {public int[] nextGreaterElements(int[] nums) {Deque<Integer> stack = new LinkedList<>();int[] res = new int[nums.length];Arrays.fill(res, -1);stack.push(0);int length = nums.length;for (int i = 0; i < length * 2; i++) {            while (!stack.isEmpty() && nums[i % length] > nums[stack.peek()]) {res[stack.peek()] = nums[i % length];stack.pop();}stack.push(i % length);}return res;}
}

接雨水

  • 暴力
    • 也是使用双指针。
    • 按照列来计算的话,宽度一定是1了,我们再把每一列的雨水的高度求出来就可以了。
    • 只要记录左边柱子的最高高度 和 右边柱子的最高高度,就可以计算当前位置的雨水面积,这就是通过列来计算。
    • 当前列雨水面积:min(左边柱子的最高高度,记录右边柱子的最高高度) - 当前柱子高度。 min(lHeight, rHeight) - height。
    • 只要从头遍历一遍所有的列,然后求出每一列雨水的体积,相加之后就是总雨水的体积了。
    • 时间复杂度为 O ( n 2 ) O(n^2) O(n2),空间复杂度为 O ( 1 ) O(1) O(1)超时

在这里插入图片描述

class Solution {public int trap(int[] height) {// 暴力int sum = 0;for (int i = 0; i < height.length; i++) {// 第一个柱子和最后一个柱子不接水if(i == 0 || i == height.length - 1) continue;int rHeight = height[i]; // 记录右边柱子的最高高度int lHeight = height[i]; // 记录左边柱子的最高高度for (int r = i + 1; r < height.length; r++){rHeight = Math.max(rHeight, height[r]);}for (int l = i - 1; l >= 0; l--){lHeight = Math.max(lHeight, height[l]);}int h = Math.min(rHeight, lHeight) - height[i];if (h > 0) sum += h;}return sum;}
}
  • 双指针优化

    • 优化思路是讲取左侧最高高度和右侧最高高度脱离出来,提前处理
    • 暴力解法中,为了得到两边的最高高度,使用了双指针来遍历,每到一个柱子都向两边遍历一遍,这其实是有重复计算的。
    • 我们把每一个位置的左边最高高度记录在一个数组上(maxLeft),右边最高高度记录在一个数组上(maxRight),这样就避免了重复计算。
    • 从左向右遍历:maxLeft[i] = max(height[i], maxLeft[i - 1]);
    • 从右向左遍历:maxRight[i] = max(height[i], maxRight[i + 1]);
class Solution {public int trap(int[] height) {// 双指针优化if (height.length <= 2) return 0;int[] maxLeft = new int[height.length];int[] maxRight = new int[height.length];int length = height.length;// 记录每个柱子左边柱子的最大高度maxLeft[0] = height[0];for (int i = 1; i < length; i++) {maxLeft[i] = Math.max(height[i], maxLeft[i-1]);}// 记录每个柱子右边柱子的最大高度maxRight[length-1] = height[length-1];for (int i = length-2; i >= 0; i--) {maxRight[i] = Math.max(height[i], maxRight[i+1]);}// 求和int sum = 0;for (int i = 0; i < length; i++) {int count = Math.min(maxLeft[i], maxRight[i]) - height[i];if (count > 0) sum += count;}return sum;}
}
  • 单调栈
    • 单调栈就是保持栈内元素有序,需要自己维持顺序。
    • 通常是一维数组,要寻找任一个元素的右边或左边第一个比自己大或者小的元素的位置,此时用单调栈。

在这里插入图片描述

class Solution {public int trap(int[] height) {if (height.length <= 2) return 0;Stack<Integer> stack = new Stack<Integer>();stack.push(0);int sum = 0;for (int i = 1; i < height.length; i++) {if (height[i] < height[stack.peek()]) {stack.push(i);}else if (height[i] == height[stack.peek()]) {stack.pop();stack.push(i);}else {// pop up all lower valuewhile (!stack.isEmpty() && height[i] > height[stack.peek()]) {int mid = stack.peek();stack.pop();if (!stack.isEmpty()) {int h = Math.min(height[stack.peek()], height[i]) - height[mid];int w = i - stack.peek() - 1;int hold = h * w;if (hold > 0) sum += hold;}}stack.push(i);}}return sum;}
}
http://www.yayakq.cn/news/842391/

相关文章:

  • 软件工程课程设计课程网站建设做下载类型网站怎样划算
  • 找网页模板的网站山东网络公司排名
  • wordpress添加文件seo联盟
  • 代码如诗 wordpress网站翻新后seo怎么做
  • 免费的外链网站现在有哪些网站兼职可以做
  • 石家庄网站建设方案优化做任务可以给钱的网站
  • 贵州城乡建设网站it运维方案
  • 今天实时热搜榜排名免费seo工具大全
  • 网站建设丿金手指下拉9石狮网站建设价格
  • 网站和公众号的区别是什么为什么没有网站做图文小说
  • 张家港早晨网站建设建设网站出什么科目
  • 网站建设关键词优化价格wordpress 书站
  • vs做网站mvc网页设计需要设计什么
  • 服装网站功能网站开发智能化方向
  • 网站正在建设中 代码遵化建设局网站
  • 河南省建设工程标准定额管理网站wordpress高阶教程
  • 给别人做网站挣钱青岛栈桥附近景点玩的顺序
  • 镇海网站建设十堰建设网站首页
  • 奉化网站建设报价可以更改上传到网站的文件内容吗
  • 不用服务器做视频网站吗免费推广网站入口2020
  • 深圳龙华的学校网站建设广东新闻联播主持人
  • 做网站的哪家好中国500强公司排名查询
  • 建设银行网站信任新版wordpress编辑器
  • 洛阳做网站公司电话html网站中文模板下载
  • 找人做网站定金不退深圳网站设计服务找哪家
  • 重庆网站建设狐灵免费查看招标信息的网站
  • 乐潍清网站额建设wordpress+手工网站
  • seo网站建设公司公司建网站多少钱一年
  • 中企动力公司网站价格秦皇岛哪里能做网站
  • 网站建设服务公中国100强企业排行榜