首页 > 其他分享 >leetcode刷题随笔(2)

leetcode刷题随笔(2)

时间:2023-04-18 23:58:39浏览次数:58  
标签:right van int max height left 随笔 leetcode 刷题

42.收集雨水(Trapping Rain Water)

方法一:利用双指针交叉循环求解,时间复杂度O(n)

//接雨水
int trap(vector<int>& height) {
        int i=0,j=height.size()-1;
        int left_max=0,right_max=0;
        int van=0;
        while(i<j)
        {
            if(height[i]<height[j])
            {
                if(height[i]>left_max)
                {
                    left_max=height[i];
                    i++;
                }
                else
                {
                    
                    van+=left_max-height[i];
                    //第一次漏掉了i++
                    i++;
                }
            }
            else
            {
                if(height[j]>right_max)
                {
                    right_max=height[j];
                    j--;
                }
                else
                {
                    van+=right_max-height[j];
                    j--;
                }
            }

        }
        return van;


    }

方法二:动态规划O(n)

  int trap(vector<int>& height) {
     
        //动态规划,事先保存
        int n=height.size();
        vector<int> left_max(n);
        vector<int> right_max(n);


        int max=0;
        for(int i=0;i<n;i++)
        {
            if(height[i]>=max)
            {
                max=height[i];  
            }
             left_max[i]=max;
             //i++; 已经加过了
             
        }
        max=0;
        for(int j=n-1;j>=0;j--)
        {
            if(height[j]>=max)
            {
                max=height[j];  
            }
             right_max[j]=max;
             //j-- ;
        }
        int ans=0;
        for(int i=0;i<n;i++)
        {
            if(height[i]<left_max[i]&&height[i]<right_max[i])
            {
                //理解出错
                ans+=min(left_max[i],right_max[i])-height[i];
            }
        }
        return ans;
         



    }

 

 

 

标签:right,van,int,max,height,left,随笔,leetcode,刷题
From: https://www.cnblogs.com/lzuu/p/17331734.html

相关文章

  • LeetCode Top100: 反转链表 (python)
     给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出:[] 提示:链表中节点的数目范围是 [0,5000]-5000<=Node.val<=5000实现:给你......
  • 2023/4/18每日随笔
       今天,上了英语口语,数据库,和python,数据库课上学了需求分析,数据库的建立等等,是一些以后做项目的要用到的东西。然后,python课上写报告,然后跑了八圈,晚上写了项目,解决了Androidfragment的添加bug,以及数据传输问题,我写的很乱,我觉得应该有一个东西可以在整个项目共享,但是我不知道......
  • LeetCode Top100: 翻转二叉树(python)
    给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[] 提示:树中节点数目范围在 [0,100] 内-100<=Node.val<=100实......
  • LeetCode Top 100: 二叉树的直径 (python)
     给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例:给定二叉树1/\23/\45返回 3,它的长度是路径[4,2,1,3]......
  • 4月18日leetcode二叉树几种遍历方式的非递归和递归
    给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例1:二叉树的前序中序和后序遍历算法是学习二叉树必不可少的,若是使用c语言遍历前中后序还是比较繁琐的,因为要考虑遍历结果存放的序列大小问题,想要解决这个问题就得想用递归计算二叉树的节点数量,再调用递归子函数完......
  • leetcode_打卡7
    leetcode_打卡7题目:238.除自身以外数组的乘积思路:代码:classSolution{publicint[]productExceptSelf(int[]nums){intn=nums.length;intsum=1,result=1;intj=0;int[]answer=newint[n];for(inti=0;i<n;i++){......
  • #yyds干货盘点# LeetCode程序员面试金典:两数相除
    题目:给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和取余运算。整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345将被截断为8,-2.7335将被截断至-2。返回被除数 dividend 除以除数 divisor 得到的商。注意:假设我们的......
  • #yyds干货盘点# LeetCode面试题:删除有序数组中的重复项 II
    1.简述:给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。 说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数......
  • LeetCode:Search Algorithm
    LeetCode:SearchAlgorithm1\FirstuniquecharAlgorithmDesign利用字符数量的有限性,通过数组来映射(避免Hash_map的高复杂度)注意数组声明为intA[26]而不是charA[26];if(s=="")return''; intA[26]={0,0}; for(inti=0;i<s.length();i++){ A[s[i]-......
  • leetcode-206反转链表
    反转链表方法一:迭代法/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val(x),next(nullptr){}*ListNode(intx,ListNode*next)......