• 【刷题专项】— 模拟


    1、替换所有的问号 - 力扣(LeetCode)

    思路:

    1. 首先找到需要替换的 ' ? ',位置
    2. 然后遍历26个字母与 '?' 的左右两边的是否相同,不同的话就替换
    3. 最后返回即可
    4. 代码:
      1. public String modifyString(String s) {
      2. char[] ch = s.toCharArray();
      3. int n = s.length();
      4. for(int i = 0; i < n; i++){
      5. if(ch[i] == '?'){
      6. //替换
      7. for(char j = 'a'; j <= 'z'; j++){
      8. //如果 i == 0 的话,就需要判断它前一个数相等不相等
      9. //如果 i == n-1 的话,就需要判断它前一个数相不相等
      10. if(((i == 0) || (ch[i-1] != j)) && ((i == n-1) || (ch[i+1] != j))){
      11. ch[i] = j;
      12. break;
      13. }
      14. }
      15. }
      16. }
      17. return String.valueOf(ch);
      18. }

    2、提莫攻击 - 力扣(LeetCode) 

    思路:

    1. 当差值小于中毒的持续时间时,那么中毒时间就是差值,大于中毒持续时间时, 那么时间就是d
    2. 代码:
      1. public int findPoisonedDuration(int[] timeSeries, int duration) {
      2. int ret = 0;
      3. for(int i = 1; i < timeSeries.length; i++){
      4. int x = timeSeries[i] - timeSeries[i-1];
      5. if(x >= duration){
      6. ret += duration;
      7. }else{
      8. ret += x;
      9. }
      10. }
      11. return ret + duration;
      12. }

    3、Z 字形变换 - 力扣(LeetCode) 

    思路:

    1. 双层循环遍历矩阵,然后填写数组
    2. 找规律,简化操作
      1. public String convert(String s, int numRows) {
      2. //处理边界
      3. if(numRows == 1){
      4. return s;
      5. }
      6. int d = 2*numRows - 2;
      7. StringBuilder ret = new StringBuilder();
      8. //处理第一行
      9. for(int i = 0; i < s.length(); i += d){
      10. ret.append(s.charAt(i));
      11. }
      12. //处理中间行
      13. //依次枚举中间行
      14. for(int k = 1; k < numRows-1; k++){
      15. for(int i = k, j = d-i; i < s.length() || j < s.length(); i+=d, j+=d){
      16. if(i < s.length()){
      17. ret.append(s.charAt(i));
      18. }
      19. if(j < s.length()){
      20. ret.append(s.charAt(j));
      21. }
      22. }
      23. }
      24. //处理最后一行
      25. for(int i = numRows-1; i < s.length(); i+=d){
      26. ret.append(s.charAt(i));
      27. }
      28. return ret.toString();
      29. }

    4、外观数列 - 力扣(LeetCode) 

    思路:

    1. 定义left和right两个指针从头开始
    2. 如果left位置的值等于right的话,right向右移动
    3. 直到不相等就统计一下,个数和值
    4. 代码:
      1. public String countAndSay(int n) {
      2. String ret = "1";
      3. //解释n-1次 ret即可
      4. for(int i = 1; i < n; i++){
      5. int len = ret.length();
      6. StringBuilder tmp = new StringBuilder();
      7. for(int left = 0, right = 0; right < len; ){
      8. // 防止越界
      9. while(right < len && ret.charAt(right) == ret.charAt(left)){
      10. right++;
      11. }
      12. //组合一下结果
      13. tmp.append(Integer.toString(right - left));
      14. tmp.append(ret.charAt(left));
      15. left = right;
      16. }
      17. //内循环结束就赋值到最终结果上
      18. ret = tmp.toString();
      19. }
      20. return ret;
      21. }

    5、数青蛙 - 力扣(LeetCode) 

    思路:

    1.  将蛙鸣存入哈希表,然后遍历目标字符串的时候就在哈希表中查看这个值是多少
    2. 会出现两种情况:
    3. 代码:
      1. public int minNumberOfFrogs(String croakOfFrogs) {
      2. char[] c = croakOfFrogs.toCharArray();
      3. //蛙鸣
      4. String t = "croak";
      5. int n = t.length();
      6. //存储蛙鸣的哈希表
      7. int[] hash = new int[n];
      8. //存储下标和字符的哈希表
      9. Map<Character,Integer> index = new HashMap<>();
      10. //存储下标
      11. for(int i = 0; i < n; i++){
      12. index.put(t.charAt(i),i);
      13. }
      14. //遍历蛙鸣,并且判断一下
      15. for(char ch : c){
      16. //判断是否等于第一个字符
      17. if(ch == t.charAt(0)){
      18. //相等就判断最后一个字符的哈希值是否不等于0
      19. if(hash[n-1] != 0){
      20. //不等于0的话就--,第一个字符++,新一轮判断
      21. hash[n-1]--;
      22. }
      23. hash[0]++;
      24. }else{
      25. //不是一个字符的话,判断前一个字符的哈希值是否为0
      26. if(hash[index.get(ch) - 1] == 0){
      27. return -1;
      28. }else{
      29. hash[index.get(ch) - 1]--;
      30. hash[index.get(ch)]++;
      31. }
      32. }
      33. }
      34. for(int i = 0; i < n-1; i++){
      35. if(hash[i] != 0){
      36. return -1;
      37. }
      38. }
      39. return hash[n-1];
      40. }
  • 相关阅读:
    基础算法 - 常见算法模板题(最简洁写法)【上】
    数字图像处理大作业
    全志R128基础组件开发指南——SPI LCD 显示驱动
    计算机的 bit(比特)和Byte(字节)
    关于 ogbg-molhi数据集的个人解析
    Java 集合 - Map 接口
    TSA优化算法——模仿航海过程中外套的喷气推进和蜂群行为(Matlab代码实现)
    嵌入式软件设计之美-以实际项目应用MVC框架与状态模式(下)
    自然语言处理(NLP)-spacy简介以及安装指南(语言库zh_core_web_sm)
    上周热点回顾(1.1-1.7)
  • 原文地址:https://blog.csdn.net/weixin_62678196/article/details/140404550