ST表(转载自其它博主)

文章目录

  • 一、简介
  • 二、Leetcode题目补充
    • 1. 2023/9/6 更新

一、简介

ST表:https://zhuanlan.zhihu.com/p/123360481

二、Leetcode题目补充

1. 2023/9/6 更新

239. 滑动窗口最大值
ST表(转载自其它博主)_第1张图片

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        //记录数组的长度
        int length=nums.length;
        //创建返回结果的数组
        int[] cons=new int[length-k+1];
        //确定ST表的跳跃指数
        int j=0;
        while((1<<j)<k){
            j++;
        }
         if(j==0)
        {
            j++;
        }
        //定义ST数组
        int[][] f=new int[length][j];
        int m1=0;
        //初始化ST数组
        for(int i=0;i<length;i++){
            //以i为起点,长度为2的0次方为长度的区间的最大值
            f[i][m1]=nums[i];
        }
        //预处理ST数组
        for(int h=1;h<j;h++){
            for(int i=0;i+(1<<h)-1<length;i++){
                f[i][h]=Math.max(f[i][h-1],f[i+(1<<(h-1))][h-1]);
            }
        }
        j--;
        for(int i=0;i<length-k+1;i++){
            int m=Math.max(f[i][j],f[i+k-(1<<j)][j]);
            cons[i]=m;
        }
        return cons;
    }
}

你可能感兴趣的:(数据结构与算法,算法)