• 低级进阶-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) 查找第一个大于某个元素的位置

  • 相关阅读:
    Linux系统中常用操作命令
    CentOS 7 巨大变动之 systemd 取代 SysV的Init
    不可不知的安卓屏幕知识
    Gradle-jar-aar
    【Android】开源项目汇总
    Android中关于系统Dialog无法全屏的问题(dialog样式)
    Android LockScreen (锁屏弹窗)
    linux 权限设置
    android 多语言(在APP里面内切换语言)
    host更新
  • 原文地址:https://www.cnblogs.com/leefree/p/12634858.html
Copyright © 2020-2023  润新知