力扣打卡——接雨水、无重复字符的最长子串

42. 接雨水 - 力扣(LeetCode)

思路:当前列雨水面积:min(左边柱子的最高高度,记录右边柱子的最高高度) - 当前柱子高度。

为了得到两边的最高高度,使用了双指针来遍历,每到一个柱子都向两边遍历一遍,这其实是有重复计算的。我们把每一个位置的左边最高高度记录在一个数组上(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) {
        //使用双指针进行做
        int length=height.length;
        if(length<=2) return 0;

        int [] leftMax=new int[length];
        int [] rigthMax=new int[length];
        // 记录每个柱子左边柱子最大高度
        leftMax[0] =height[0];
        for(int i=1;i<length;i++){
          leftMax[i]=Math.max(height[i],leftMax[i-1]);
        }
        
        // 记录每个柱子右边柱子最大高度
        rigthMax[length-1]=height[length-1];
        for(int j=length-2;j>=0;j--){
            rigthMax[j]=Math.max(height[j],rigthMax[j+1]);
        }
          // 求和
        int sum=0;
        for(int i=0;i<length;i++){
            int count=Math.min(leftMax[i],rigthMax[i])-height[i];
            sum+=count;
        }
        return sum;

    }
}

3. 无重复字符的最长子串 - 力扣(LeetCode)

可以把"窗口"想象成字符串中满足条件(无重复字符)的一段区间 [left, right]

  1. 我们使用两个指针 leftright 来表示窗口的左右边界,初始都为 0。

  2. right 指针主动向右遍历字符串,将新字符加入窗口。

  3. 如果加入的新字符在窗口中已经存在 (即出现了重复),我们就需要收缩窗口:将 left 指针向右移动,直到窗口内不再包含该重复字符为止。

  4. 在这个过程中,每次窗口处于"无重复"状态时,我们就记录一下当前窗口的长度 right - left + 1,并更新最大长度。

    class Solution {
    public int lengthOfLongestSubstring(String s) {
    // 记录字符及其最近一次出现的索引
    HashMap<Character, Integer> map = new HashMap<>();
    int left=0;
    int maxLength=0;
    for(int right=0;right<s.length();right++){
    char str=s.charAt(right);
    // 如果遇到了重复字符,且该字符在当前窗口内
    if(map.containsKey(str)&&map.get(str)>=left){
    left = map.get(str) + 1;
    }
    // 将字符及当前索引放入/更新到哈希表中
    map.put(str, right);
    // 计算当前无重复子串长度,更新最大值
    maxLength=Math.max(maxLength,right-left+1);
    }
    return maxLength;
    }
    }

相关推荐
x_yeyue1 小时前
三角形数
笔记·算法·数论·组合数学
念何架构之路2 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星2 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑2 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光3 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩3 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_629494733 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
ʚ希希ɞ ྀ4 小时前
单词拆分----dp
算法
智者知已应修善业5 小时前
【51单片机LED闪烁10次数码管显示0-9】2023-12-14
c++·经验分享·笔记·算法·51单片机
智者知已应修善业5 小时前
【51单片机2按键控制1个敞亮LED灯闪烁和熄灭】2023-11-3
c++·经验分享·笔记·算法·51单片机