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

力扣今日两题

  • 1052. 爱生气的书店老板-中等
  • 189. 轮转数组-中等
  • 总结

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
}

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
}

总结

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

你可能感兴趣的:(leetcode刷题,leetcode,算法,golang)