题目链接: Leetcode Weekly Contest 261
1、2027. Minimum Moves to Convert String
难度:Easy
代码:
class Solution {
public int minimumMoves(String s) {
char[] a=s.toCharArray();
int res=0;
for(int i=0;i<a.length;){
if(a[i]=='X'){
res++;
i+=3;
}
else{
i++;
}
}
return res;
}
}
2、2028. Find Missing Observations
难度:Medium
代码:
class Solution {
public int[] missingRolls(int[] rolls, int mean, int n) {
int m=rolls.length;
int sum=mean*(m+n);
for(int r:rolls){
sum-=r;
}
if(sum<n||sum>6*n){
int[] res=new int[0];
return res;
}
int b=sum%n;
int a=sum/n;
int[] res=new int[n];
Arrays.fill(res,a);//先平均分配
for(int i=0;i<b;i++){//分配余数
res[i]++;
}
return res;
}
}
3、2029. Stone Game IX
难度:Medium
思路:
参考高赞回答,数学推理题,比较难。
代码
class Solution {
public boolean stoneGameIX(int[] stones) {
int[] cnt=new int[3];
//cnt[i]表示stones[]%3=i的个数
for(int a:stones){
cnt[a%3]++;
}
if( (cnt[0]%2==0&&cnt[1]>0&&cnt[2]>=cnt[1])||(cnt[0]%2==0&&cnt[2]>0&&cnt[1]>=cnt[2])){
//1,[1,2,1,2,...],2(还能剩下很多2)
//2,[2,1,2,1,...],1//第一种情况的对偶
return true;
}
if( (cnt[0]%2==1&&(cnt[1]-cnt[2]>=3))||(cnt[0]%2==1&&(cnt[2]-cnt[1]>=3)) ){
//1,[1,2,1,2,...],0,1(还能剩下很多1)
//2,[2,1,2,1,...],0,2//第一种情况的对偶
return true;
}
return false;
}
}
4、2030. Smallest K-Length Subsequence With Occurrences of a Letter
难度:Hard
思路
贪心,参考高赞回答。
代码
class Solution {
public String smallestSubsequence(String s, int k, char letter, int repeat) {
char[] str=s.toCharArray();
int n=str.length;
int count=0;
for(char c:str){
if(c==letter){
count++;
}
}
Stack<Character> stack=new Stack<>();
for(int i=0;i<n;i++){
char c=str[i];
while(!stack.isEmpty()&&stack.peek()>c&&n-i+stack.size()-1>=k&&(stack.peek()!=letter||count>repeat)){
//n-i+stack.size()-1>=k保证弹出栈顶元素后还能凑够k个字符
//stack.peek()!=letter||count>repeat保证能凑够repeat个letter
if(stack.peek()==letter){
repeat++;//还需要多少个letter字符
}
stack.pop();
}
if(stack.size()<k){
if(c==letter){
stack.push(c);
repeat--;
}
else if(k-stack.size()-repeat>0){//还需要多少个不是letter的字符
stack.push(c);
}
}
if(c==letter){
count--;//剩余的字符中还有多少个为letter的字符
}
}
StringBuilder sb=new StringBuilder();
while(!stack.isEmpty()){
sb.append(stack.pop());
}
return sb.reverse().toString();
}
}