Weekly Contest 107 AC思路

简介: Weekly Contest 107 AC思路

比赛题目链接:https://leetcode-cn.com/contest/weekly-contest-107/

第一题:925. 长按键入
原题链接:https://leetcode-cn.com/contest/weekly-contest-107/problems/long-pressed-name/

思路:看题目的话,会分析出一个出来一个思路就是,对字符串进行压缩,举例分析
abbccca
序号 字符 出现次数
1 a 1
2 b 2
3 c 3
4 a 1

那么,我们可以对name和typed字符串进行压缩,存储到切片里(或数组),然后进行比较

// 定义一个结构体
type longScan struct {
    num int    // 次数
    char byte // 字符
}

// 定义存储变量
nScan, tScan := []longScan{}, []longScan{}

// 压缩存储name
// 压缩存储typed
// 比较nScan, tScan
for i := 0;i < len(nScan);i++ {
        if nScan[i].char != tScan[i].char || nScan.num > tScan.num {
                  return false
        }
}
return false

第一题的整体思路就这样了
我AC代码链接:https://github.com/laijinhang/acm-go/blob/master/leetcode_go/%E6%AF%94%E8%B5%9B/925.%20%E9%95%BF%E6%8C%89%E9%94%AE%E5%85%A5.go

第二题:926. 将字符串翻转到单调递增
原题链接:https://leetcode-cn.com/contest/weekly-contest-107/problems/flip-string-to-monotone-increasing/

思路:分析题目,可以知道最终结果第一次出现1的地方开始后都要为1
思路一:
那么转化成出现1的地方要么 1-> 0,要么 1 -> 1。
第一种操作的话,加上翻转次数,继续往下找到出现1的地方,重复这个步骤
第二种操作的话,计算后面出现0的个数,判断是否为最小,是的话,就值替换

思路二:
1)先将字符串进行压缩

type MonoIncr struct {
    num int    // 次数
    char byte // 字符
}

2)然后对压缩之后的内容计算,要么 1->0,要1->1后面全部变1,计算翻转次数

我AC代码链接:https://github.com/laijinhang/acm-go/blob/master/leetcode_go/%E6%AF%94%E8%B5%9B/926.%20%E5%B0%86%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%BF%BB%E8%BD%AC%E5%88%B0%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E.go

会发现很像01背包问题

题目三:927. 三等分
原题链接:https://leetcode-cn.com/contest/weekly-contest-107/problems/three-equal-parts/

思路:分析题目,要得到三等分,那么三个区间1的个数要能整除3,而且每一个区间1的个数要相等
1)如果A的长度小于3,则直接返回[-1,-1]
2)如果A中1的个数%3不等于0,则直接返回[-1,-1]

一个二进制数出现第一个1之前出现的0都不算在二进制数里面

3)计算A中1的个数
4)设a1、a2、a3、a4、a5、a6,意思分别表示a1的第一个区间第一次出现1的下标值,a2是从a1开始出现第num/3个1的下标值,a3表示a2+1开始第一次出现1的下标值,a4表示从a3开始出现第num/3个1的下标值,a5表示a4+1开始第一次出现1的下标值,a6表示从a5开始第num/3个1的下标值。
5)分别计算出a1、a2、a3、a4、a5、a6的值
6)要满足len(A) - a6 - 1 + a2 < a3 && len(A) - a6 - 1 + a4 < a5,不满足则返回[-1,-1]
7)比较A[a1:a2+1],A[a3:a4+1],A[a5:a6+1],如果相同则返回[len(A) - a6 - 1 + a2, len(A) - a6 + a4],不同则返回[-1,-1]

我AC代码链接:https://github.com/laijinhang/acm-go/blob/master/leetcode_go/%E6%AF%94%E8%B5%9B/927.%20%E4%B8%89%E7%AD%89%E5%88%86.go

简书博客链接:https://www.jianshu.com/p/bbb0744f70a4

目录
相关文章
luogu CF776D The Door Problem(2-sat问题)
luogu CF776D The Door Problem(2-sat问题)
65 0
P2852 [USACO06DEC]牛奶模式Milk Patterns 后缀数组(poj3261)
P2852 [USACO06DEC]牛奶模式Milk Patterns 后缀数组(poj3261)
96 0
|
移动开发
洛谷P2639-[USACO09OCT]Bessie‘s Weight Problem G(01背包)
洛谷P2639-[USACO09OCT]Bessie‘s Weight Problem G(01背包)
洛谷P2639-[USACO09OCT]Bessie‘s Weight Problem G(01背包)
|
算法
HDU-1050,Moving Tables(不用贪心也AC)
HDU-1050,Moving Tables(不用贪心也AC)
[USACO 2012 Feb G]Cow Coupons----贪心&带悔(看完稳AC)
意思是有n头牛,现在有k张优惠券以及m元,每头牛有一个原始价格和折扣价格,问最多能买多少牛 一开始的方法很简单,由于题目里面说了折扣价格一定比原始价格便宜,所以说首先按照折扣价格从小大大进行排序,将前k个牛的花费看作是折扣之后的价格,而将后面的花费看作是原始价格,然后重新将价值从小到大进行排序,尽可能的多选
245 0
[USACO 2012 Feb G]Cow Coupons----贪心&带悔(看完稳AC)
|
测试技术
HDU-1847,Good Luck in CET-4 Everybody!(巴什博弈)
HDU-1847,Good Luck in CET-4 Everybody!(巴什博弈)
|
人工智能 算法 Java
LeetCode Weekly Contest 238
LeetCode Weekly Contest 238
90 0
|
消息中间件 数据建模
题解 P1339 【[USACO09OCT]热浪Heat Wave】
题目链接 这道题纯属是一个裸的SPFA;建议先把模板AC之后再做。只需要做一些手脚,就是在加边的时候加一个双向边就好。然后再第一次加点的时候看不懂模板的出门左转度娘。推荐下面一片讲解:友链所以说,直接上代码。
1142 0