第294场周赛
第294场周赛
前言
每周差不多稳定3题,这T4也忒难了
第一题
2278.字母在字符串中的百分比
2278.字母在字符串中的百分比
题解
题目:某个字母出现在字符串中的百分比
思路:用库函数一行
代码
func percentageLetter(s string, letter byte) int { return strings.Count(s, string(letter)) * 100 / len(s) }
第二题
2279.装满石头的背包的最大数量
2279.装满石头的背包的最大数量
题解
题目:给一个容量数组,和已经装了多少的数组,,还有一个additionalRocks可以给第一个数组用,问如何分配additionalRocks,能使装满的元素最多
思路:
1.将容量数组减去已经装的数组,就是还能装多少的数组 2.排序还能装多少的数组,从小到大 3.依次将additionalRocks给元素
代码
func maximumBags(capacity []int, rocks []int, additionalRocks int) int { ans := 0 for i := range capacity { capacity[i] -= rocks[i] } sort.Ints(capacity) for _, v := range capacity { if additionalRocks < v { break } additionalRocks -= v ans++ } return ans }
第三题
2280.表示一个折线图的最少线段数
2280.表示一个折线图的最少线段数
题解
题目:给你多个坐标,组成一个折线图,问折线最少有几个
思路:
1.按照x坐标排序 2.除法会有误差,改用乘法 3.设刚开始斜率为1/0
(y2-y1)/(x2-x1)=k 设y2-y1=dy x2-x1=dx k=dy/dx 那么判断两条线斜率是否相等就是判断k1 == k2 dy1/dx1==dy2/dx2 --> dy1 * dx 2 == dx1 * dy 2 由于折线必定是连续的,所以即使出现A,B,C三段,A和C同斜率也没事 因为C判断k的时候,是和B的斜率取判断
代码
func minimumLines(stockPrices [][]int) int { sort.Slice(stockPrices, func(i, j int) bool { return stockPrices[i][0] < stockPrices[j][0] }) px, py :=0,1 ans := 0 for i := 1; i < len(stockPrices); i++ { y2, x2 := stockPrices[i][1], stockPrices[i][0] y1, x1 := stockPrices[i-1][1], stockPrices[i-1][0] dx, dy := x2-x1, y2-y1 if dx*py != dy*px { ans++ px, py = dx, dy } } return ans }