• 从零开始的力扣刷题记录-第九十天


    1052. 爱生气的书店老板-中等

    题目描述:
    有一个书店老板,他的书店开了 n 分钟。每分钟都有一些顾客进入这家商店。给定一个长度为 n 的整数数组 customers ,其中 customers[i] 是在第 i 分钟开始时进入商店的顾客数量,所有这些顾客在第 i 分钟结束后离开。
    在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。
    当书店老板生气时,那一分钟的顾客就会不满意,若老板不生气则顾客是满意的。
    书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 minutes 分钟不生气,但却只能使用一次。
    请你返回 这一天营业下来,最多有多少客户能够感到满意 。

    题解:
    滑动窗口,先计算出不抑制情绪时能使多少客户满意,然后从前往后使用滑动窗口的方法依次判断在不同时机使用技巧的结果,保留最大值即可

    代码(Go):

    func maxSatisfied(customers []int, grumpy []int, minutes int) int {
        sat := 0
        for i,v := range customers{
            if grumpy[i] == 0{
                sat += v
            }
        }
        for i := 0;i < minutes;i++{
            if grumpy[i] == 1{
                sat += customers[i]
            }
        }
        l := 0
        r := minutes - 1
        max := sat
        for r < len(customers) - 1{
            r++
            if grumpy[r] == 1{
                sat += customers[r]
            }
            if grumpy[l] == 1{
                sat -= customers[l]
            }
            l++
            if sat > max{
                max = sat
            }
        }
        return max
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    189. 轮转数组-中等

    题目描述:
    给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

    题解:
    把数组想成是一个头尾相接的环,从第一个元素开始依次向右轮转k个位置,若回到起点则从下一个元素开始轮转,count记录轮转了多少元素,直到count等于数组中的元素个数时停止轮转

    代码(Go):

    func rotate(nums []int, k int)  {
        count := 0
        n := len(nums)
        k = k % n
        for i := 0; count < len(nums);i++{
            temp := nums[i]
            start := i
            for {
                if count == n{
                    return
                }else if (start + k)%n == i {
                    start += k
                    nums[start % n],temp = temp,nums[start % n]
                    count++
                    break
                }else{
                    start += k
                    nums[start % n],temp = temp,nums[start % n]
                    count++
                }
            }
        }
        return
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    总结

    想稳定下来做题还是有点难,现在只能尽量做了,没法定一个明确目标,希望下学期时间能多一些

  • 相关阅读:
    java异常学习
    计算思维相关书籍 计算机思维、数学思维与逻辑思维
    Java-HelloWorld编写与执行(记事本)错误: 编码GBK的不可映射字符
    Linux下通过bonding技术实现网络负载均衡
    【力扣】两数相除(c/c++)
    元宇宙,小荷才露尖尖角
    WMS系统出库管理:优化仓储流程
    教你给Linux下新设备从0开始写一个ioctl驱动接口
    所有产品都值得用AI再做一遍,让AGI与品牌营销双向奔赴
    如何制作一个开屏引导轮播图?
  • 原文地址:https://blog.csdn.net/qq_24494293/article/details/133869122