低级进阶-200404杂学

leetcode每日一题

今天是我在力扣做题的第二天,也是第一次做每日一题,就,写得挺暴力。因为目前为止,我都是“能解出来就万事大吉”的态度,思路没规划就开始敲代码,执行几次改几次。如果有的题写得乱些,过两天我也不知道自己写了什么鬼。

解完后发现这题标的难度是困难,有点高兴(_)。不过我还不了解力扣是怎么评难度的。

题目是这样的:

  1. 接雨水

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

img

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。

示例:

输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/trapping-rain-water
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我最开始的做法:

class Solution {
public:
    int trap(vector<int>& height) {
      int q=0;
      int sum=0;
      for(int i=1;i<height.size();i++){
        if(height[i]>height[i-1]){
            for(int j=i-1;j>q;j--){
                int t=min(height[i],height[q])-height[j];
                if(t>0){
                    sum+=t;height[j]=min(height[i],height[q]);
                }
              }
            
          }
        if(height[i]>=height[q]){
            q=i;
        }
      } 
      return sum;
    }
};

我的思路是:只有柱子高度上升+左边有柱子凸出时需要考虑填充雨水的问题,为了避免重复在一个地方填充雨水,每次填充雨水后的相应空地的高度要进行改变,把雨水的存储高度看成是柱子的高度。

我在看大家的题解前,决定自己尝试改进运行时间。在脑内臆想中,有两个索引巴拉巴拉……结果超出了时间限制。好吧,我还是看看别人的题解吧。

看到了官方的栈解,才恍然反应过来这不就是个栈嘛!/(ㄒoㄒ)/~~

官方也给出了一个双索引答案 时间复杂度O(n),空间复杂度O(1)的。

https://leetcode-cn.com/problems/trapping-rain-water/solution/jie-yu-shui-by-leetcode/

一个以高度最大值为分界线的解法也好棒啊。

先确定最高柱子,这个柱子的左边的柱子就有了右面的最高依凭,接下来只要从左至右遍历时边找彼时柱子左边的最高依凭,边记录水位(彼时左边最高依凭-彼时遍历到的柱子的高度)就行了。右边也一样。

页面变灰方法

今天是一个特殊的日子。

看到了一篇公众号文: https://mp.weixin.qq.com/s/_DA0Lm6nDrLtw6YRpjCWPA

html {
    -webkit-filter: grayscale(100%);
    -moz-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
    -o-filter: grayscale(100%);
    filter: grayscale(100%);
    filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
}

filter CSS 属性将模糊或颜色偏移等图形效果应用于元素。滤镜通常用于调整图像,背景和边框的渲染。

算法书学习

今天看了《挑战程序设计竞赛》的迷你版(不到一百页)的开头,收到了两个重要信息。

首先是时间复杂度的问题。我虽然知道解题要考虑算法的复杂度优化,但不知道在竞赛中复杂度怎样才算太高。此书列了一张表。

另外就是,这本书用题和代码演示如何降低复杂度,例子非常好。题目是抽四张牌,抽出的牌代表的数字加起来要等于某个数。

记住几个函数

max_element(arr[],arr[]+size) 查找容器中的最大值 min_element(arr[],arr[]+size)

binary_search(arr[],arr[]+size,indx) 二分查找

lower_search(arr[],arr[]+size,indx) 查找第一个大于或者等于某个元素的位置 有就返回索引值 没有就返回最后一个元素的下一个位置(越界)

upper_search(arr[],arr[]+size,indx) 查找第一个大于某个元素的位置

猜你喜欢

转载自www.cnblogs.com/leefree/p/12634858.html
今日推荐