首页 > 编程语言 >算法总结

算法总结

时间:2022-08-19 23:11:47浏览次数:46  
标签:总结 窗口 int MovingAverage 算法 temperatures 滑动 size

1.每日温度题(一道关于栈的问题)

请根据每日 气温 列表 temperatures ,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
解题思路:创建一个栈用于存数组的下标,存储的是值递减,表示存储的下标还没找到比他温度高的,如果一直没找到,就用创建的数组默认值0;
package com.chenghaixiang.jianzhi2.day12;

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * @author 程海翔
 * @school 石家庄铁道大学
 */
public class Office038 {
}
//请根据每日 气温 列表 temperatures ,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。
class Solution02 {
    public int[] dailyTemperatures(int[] temperatures) {
        int[] res=new int[temperatures.length];
        // 创建一个单调栈
        Deque<Integer> stack=new ArrayDeque<>();
        int i=0;
        while (i<temperatures.length){
            // 当栈为空,或者当前元素 <= 栈顶元素,则将当前元素的索引进栈,形成栈底到栈顶的递减栈
            // 同时,将 i 指向下一天的温度
            if(stack.isEmpty()||temperatures[stack.peek()]>=temperatures[i]){
                //栈中存取的是temperatures中温度所在的下标
                stack.push(i++);
            }else {
                // 如果当前元素 > 栈顶元素,则将栈顶索引出栈,说明找到了比栈顶索引更高的温度,栈顶元素下标对应的地方获取对应的天数。
                Integer top=stack.pop();
                res[top]=i-top;
            }
        }
        return res;
        
    }
}
View Code

2.滑动窗口的平均值(一般看见滑动窗口就应该想起线性的结构)

给定一个整数数据流和一个窗口大小,根据该滑动窗口的大小,计算滑动窗口里所有数字的平均值。

实现 MovingAverage 类:

  • MovingAverage(int size) 用窗口大小 size 初始化对象。
  • double next(int val) 成员函数 next 每次调用的时候都会往滑动窗口增加一个整数,请计算并返回数据流中最后 size 个值的移动平均值,即滑动窗口里所有数字的平均值。

题解:就是利用队列的先进先出的特性,队列的大小就是窗口大小,到添加元素让队列大于size就让窗口向后滑动,利用队列让队头出队

package com.chenghaixiang.jianzhi2.day14;

import java.util.ArrayDeque;
import java.util.Queue;

/**
 * @author 程海翔
 * @school 石家庄铁道大学
 */
public class Office041 {
}
//给定一个整数数据流和一个窗口大小,根据该滑动窗口的大小,计算滑动窗口里所有数字的平均值。
//
//实现 MovingAverage 类:
//
//    MovingAverage(int size) 用窗口大小 size 初始化对象。
//    double next(int val) 成员函数 next 每次调用的时候都会往滑动窗口增加一个整数,请计算并返回数据流中最后 size 个值的移动平均值,即滑动窗口里所有数字的平均值。
class MovingAverage {
    Queue<Integer> queue;
    int size;
    double sum;
    /** Initialize your data structure here. */
    public MovingAverage(int size) {
        queue=new ArrayDeque<>();
        this.size=size;
        sum=0;
    }
    //利用队列先进先出的特性
    public double next(int val) {
        //当当前队列大于size是证明要让窗口向后滑动,队头出列
        if(queue.size()==size){
            sum-=queue.poll();
        }
        queue.offer(val);
        sum+=val;
        return sum/queue.size();
    }

}
View Code

 

标签:总结,窗口,int,MovingAverage,算法,temperatures,滑动,size
From: https://www.cnblogs.com/chenghaixiang/p/16606578.html

相关文章

  • 2022暑假集训总结
    经过简介7月20日到达内江天立学校,在小学部的机房上课。这里没什么人,比较安静,也没有那么热,学习环境挺好的。开始是老姚给我们上的课,主要讲了tarjan,然后由几位学长讲课。期......
  • 20220819总结
    这次考试太烂了,又没考过Diavolo。T1简单的入门题,先热身。#include<iostream>#defineintlonglong#defineN5001usingnamespacestd;intn,ans;doublea[N]......
  • 8.19总结
    啊~,本周的第一个暴零所罗门王的宝藏\(solution\)第一眼的时候完全没有想到是图论,当然暴零不是这个原因把行和列进行连边,因为行i的旋转次数+列j的旋转次数一定等于\(c_{......
  • 2022暑假集训总结
    2022暑假集训总结收获做了██道题跟着多校联训学的时候,主要收获是学会了一些基本的暴力算法和一些以前不知道的算法概念后来高烧休息了几天回来以后主要的收获是考试......
  • 浙里办微信小程序总结
    浙里办微信小程序单点登录流程1.获取浙里办跳转地址中ticket或者微信小程序中的ticketIdletticket=getQueryString("ticket",window.location.href);letsp......
  • 【排序】各类排序算法的时间性能比较
    用https://www.luogu.com.cn/paste/nzx555us中代码在此题运行时限\(\tt1s\),空间限制\(\tt256MB\)。插入排序冒泡排序选择排序希尔排序快速排序归并排......
  • 延时任务-基于netty时间轮算法实现
    一、时间轮算法简介为了大家能够理解下文中的代码,我们先来简单了解一下netty时间轮算法的核心原理时间轮算法名副其实,时间轮就是一个环形的数据结构,类似于表盘,将时间轮......
  • 访问端口总结
    启动方式访问端口HDFSstart-dfs.shNameNode(9000API操作;50070web访问端口)DataNode(50010dn和nn通信的端口;50075(datanode的web访问端口)snn(500......
  • 链表反转类算法题
    反转链表类NO1.反转链表给定一个长度为n的链表,反转该链表,输出表头。方法一:迭代法(推荐使用)算法流程:step1:特殊情况判断,空链表或只有一个结点的链表,直接返回头......
  • 算法工程师需要掌握哪些核心技能点?
    一、算法工程师和其他IT从业人员的区别我想大概从事IT行业的开发人员多少对算法岗位都有所了解,但是其实很多人对这个岗位的认知存在一定的误区,或者说是被一些书籍所误导。......