> 文章列表 > 转换字符串的最少操作次数是否所有1都至少相隔k个元素重复至少k次且长度为M的模式移除指定数字得到的最大结果 得到k个黑块的最少涂色次数

转换字符串的最少操作次数是否所有1都至少相隔k个元素重复至少k次且长度为M的模式移除指定数字得到的最大结果 得到k个黑块的最少涂色次数

转换字符串的最少操作次数是否所有1都至少相隔k个元素重复至少k次且长度为M的模式移除指定数字得到的最大结果 得到k个黑块的最少涂色次数

转换字符串的最少操作次数(回顾等级:不值得;已达最优解)

来源:自己LeetCode刷题
usa
转换字符串的最少操作次数是否所有1都至少相隔k个元素重复至少k次且长度为M的模式移除指定数字得到的最大结果 得到k个黑块的最少涂色次数

int minimumMoves(char * s)
{int sz=strlen(s);int res=0;for (int i=0;i<sz;i++){if (s[i]=='X'){i+=2;res++;}}return res;
}

是否所有1都至少相隔k个元素(回顾等级:不值得;已达最优解)

来源:自己LeetCode刷题
usa
转换字符串的最少操作次数是否所有1都至少相隔k个元素重复至少k次且长度为M的模式移除指定数字得到的最大结果 得到k个黑块的最少涂色次数

bool kLengthApart(int* nums, int numsSize, int k)
{int flag=0;int begin=0;for (int i=0;i<numsSize;i++){if (nums[i]==1){if (flag==0){begin=i;flag=1;}else{if (i-begin-1<k){return false;}else{begin=i;}}}  }return true;
}

重复至少k次且长度为M的模式(回顾等级:可以;已达最优解)

来源:自己LeetCode刷题
usa
在这里插入图片描述

bool containsPattern(int* arr, int arrSize, int m, int k)
{int num=k*m;if (num>arrSize){return false;}for (int i=0;i<=arrSize-num;i++){for (int j=i;j<i+m;j++){for (int q=1;q<=k-1;q++){if (arr[j]!=arr[j+q*m]){goto A;}}}return true;A:continue;}return false;
}

移除指定数字得到的最大结果(回顾等级:可以;未达最优解:贪心)

来源:自己LeetCode刷题
usa
在这里插入图片描述

int compare(char* arr, int a, int b)
{int begin1=0;int begin2=0;while(arr[begin1]!='\\0' && arr[begin2]!='\\0'){if (a==begin1){begin1++;}if (b==begin2){begin2++;}if (arr[begin1]>arr[begin2]){return a;}else if (arr[begin1]<arr[begin2]){return b;}else{begin1++;begin2++;}}return a;
}
char * removeDigit(char * number, char digit)
{int sz=strlen(number);int ans=0;int count=0;for (int i=0;i<sz;i++){if (number[i]==digit){count++;if (count==1){ans=i;}else{ans=compare(number, ans,i);}}}char* res=(char*)malloc(sizeof(char)*sz);int k=0;for (int i=0;i<sz;i++){if (i!=ans){res[k++]=number[i];}}res[k++]='\\0';return res;
}

得到k个黑块的最少涂色次数(回顾等级:可以;已达最优解)

来源:自己LeetCode刷题
usa
在这里插入图片描述

int minimumRecolors(char * blocks, int k)
{int sz=strlen(blocks);int sum=0;for (int i=0;i<k;i++){if (blocks[i]=='W'){sum++;}}int ans=sum;for (int i=1;i<=sz-k;i++){int left=i;int right=i+k-1;if (blocks[left-1]=='W'){sum--;}if(blocks[right]=='W'){sum++;}ans=ans<sum?ans:sum;}return ans;
}
  1. 滑动窗口,时间复杂度为O(N)