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

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;
    }
    }

相关推荐
superior tigre7 分钟前
78 子集
算法·leetcode·深度优先·回溯
天威?*11 分钟前
bitset的数据结构用法
算法·动态规划
hoiii18743 分钟前
粒子滤波跟踪系统 - 蒙特卡洛方法实现
算法
weisian1511 小时前
Java并发编程--47-分布式ID生成器:雪花算法(Snowflake)与时钟回拨问题
java·算法·时钟回拨·雪花算法id
itzixiao1 小时前
L1-066 猫是液体(5分)[java][python]
java·开发语言·python·算法
ytttr8731 小时前
MATLAB SIFT图像配准实现
算法·机器学习·matlab
小饕1 小时前
从 Word2Vec 到多模态:词嵌入技术的演进全景
人工智能·算法·机器学习
海参崴-2 小时前
AVL树完整实现与深度解析
算法
一个爱编程的人2 小时前
一个数是不是素数
数据结构·算法
Hui_AI7202 小时前
基于RAG的农产品GEO溯源智能问答系统实现
开发语言·网络·人工智能·python·算法·创业创新