叨叨两句

  1. 量变终于迎来了质变!破壁人系列中一个过去的问题终于得到了解答!
  2. 不但要练习,还要复习,总结思路!

题17:不同大小的两个值如何拼成一个限定的值

题目描述

书写一个类,类名为Itheima;

类中有一个方法,方法名makeBricks;

我们想做一排砖(长度自己定),我们有一些小砖(每块1英寸)和大砖(每块5英寸),
如果用我们选择的砖块的数量能够拼接成功,则返回true;否则返回false,
例如:makeBricks(3, 1, 8) → true
(尽量不使用循环,太耗费时间,会导致后台验证超时)

提示

方法调用 期望值
makeBricks(3,1,8) true
makeBricks(3,1,9) false
makeBricks(3,2,10) true
public class Itheima {
    public boolean makeBricks(int a, int b, int c){
        //指定长度最多可使用的大砖数
        int max = c / 5;
        //拼接分两种情况:b >= max 则最多使用max  b < max 则使用b
        
        if(b >= max){
            //需求小砖数
            if(c - max * 5 <= a){
                return true;
            } else {
                return false;
            }
        } else {
            //需求小砖数
            if(c- b * 5 <= a){
                return true;
            } else {
                return false;
            }
        }
    }
}

题18:分拣思想+重置计数器+求一组数最大值

题目描述:

书写一个类,类名为Itheima;

类中有一个方法,方法名maxBlock;

给定一个字符串,返回该字符串中连续出现个数最多的字符的数量。

提示:

方法调用 期望值
maxBlock("hoopla") 2
maxBlock("abbCCCddBBBxx") 3
maxBlock("") 0
import java.util.HashMap;

public class Itheima {
    public int maxBlock(String str){
        int max = 0;//用于记录某个字符连续出现最大次数
        int count = 1;//用于作为中间变量,记录正在遍历的字符的个数
        HashMap<Character,Integer> map = new HashMap<>();//Key:字符 Value:最大连续出现次数
        for (int i = 0; i < str.length() - 1; i++) {
            char c1 = str.charAt(i);
            char c2 = str.charAt(i + 1);
            if(c1 == c2){
                count++;
                map.put(c1,count);
                if(count > max){
                    max = count;
                    map.put(c1, max);
                }
            } else {
                count = 1;
                map.put(c2,count);
            }
        }
        
        int totalMax = 0;
        for (Character c : map.keySet()) {
            if(map.get(c) >= totalMax){
                totalMax = map.get(c);
            }
        }
        
        return totalMax;
        
        
    }
}

题19:获取镜像元素

题目描述

书写一个类,类名为Itheima;

类中有一个方法,方法名mirrorEnds;

给定一个字符串,如果字符串的前串和后串有镜面关系,即返回前串作为方法的返回值,例如:字符串
"abxyzba"的前串"ab"与后串"ba"则为镜面关系,那么返回字符串"ab",如果前串和后串都是相同字符串
就原路返回,例如:"xxYxx"返回"xxYxx"。如果两者都不符合就返回空。

提示

方法调用 期望值
mirrorEnds("abXYZba") "ab"
mirrorEnds("abca") "a"
mirrorEnds("aba") "aba"
public class Itheima {
    public String mirrorEnds(String str){
        String sumStr = "";
        for (int i = 0; i < str.length(); i++) {
            if(str.charAt(i) == str.charAt(str.length() - 1 - i)){
                sumStr = sumStr + str.charAt(i);
            }
            
            if(sumStr.length() != i + 1){
                break;
            }
        }
        
        if("".equals(sumStr)){
            return "";
        }
        
        if(sumStr.length() == 1){
            return sumStr;
        }
        
        boolean sumFlag = true;
        boolean flag = false;
        for (int i = 0; i < sumStr.length() - 1; i++) {
            if(sumStr.charAt(i) == sumStr.charAt(i + 1)){
                flag = true;
            }
            sumFlag = sumFlag && flag;
        }
        
        if(sumFlag){
            return str;
        } else {
            return sumStr;
        } 
        
    }
}

题20:轮流执行代码

题目描述

书写一个类,类名为Itheima;

类中有一个方法,方法名mixString;

给定两个字符串参数a和b,创建一个更大的字符串,由a的第一个字符,b的第一个字符,
a的第二个字符,b的第二个字符等组成。 任何剩余的字符在结果的末尾。
例如:"abc"和"xyz"返回的是:"axbycz".

提示

方法调用 期望值
mixString("abc","xyz") "axbycz"
mixString("Hi","There") "HTihere"
mixString("xxxx","There") "xTxhxexre"
public class Itheima {
    public String mixString(String a,String b){
        String sumStr = "";
        int maxTimes = a.length() + b.length();
        if(a.length() >= b.length()){
            for(int i = 0; i < maxTimes; i++){
                if(i / 2 < b.length()){
                    if(i % 2 == 0){
                        sumStr = sumStr + a.charAt(i / 2);
                    } else {
                        sumStr = sumStr + b.charAt(i / 2);
                    }
                } else {
                    sumStr = sumStr + a.substring(b.length());
                    break;
                }
            }
        } else {
            for(int i = 0; i < maxTimes; i++){
                if(i / 2 < a.length()){
                    if(i % 2 == 0){
                            sumStr = sumStr + a.charAt(i / 2);
                    } else {
                            sumStr = sumStr + b.charAt(i / 2);
                    } 
                } else {
                    sumStr = sumStr + b.substring(a.length());
                    break;
                }
            }
        }
        return sumStr;
    }
}

该题的简单解法

public class Itheima {
    public String mixString(String a,String b){
        String sumStr = "";
        if(a.length() >= b.length()){
            String endStr = a.substring(b.length());
            for(int i = 0; i < b.length(); i++){
                sumStr += a.charAt(i) +"" + b.charAt(i);
            }
            sumStr += endStr;
        } else {
            String endStr = b.substring(a.length());
            for(int i = 0; i < a.length(); i++){
                sumStr += a.charAt(i) + "" + b.charAt(i);
            }
            sumStr += endStr;
            
        }
        return sumStr;
    }
}

题21:标记思想的典型运用

题目描述

书写一个类,类名为Itheima;

类中有一个方法,方法名only14;

给定一个整型数组,如果所有元素都是1和4或者其中之一,就返回true。

提示

方法调用 期望值
only14([1,4,1,4]) true
only14([1,4,2,4]) false
only14([1,1]) true
public class Itheima {
    public boolean only14(int[] arr){
        boolean sumFlag = true;
        boolean flag = false;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == 1 || arr[i] == 4){
                flag = true;
            } else {
                flag = false;
            }
            sumFlag = sumFlag && flag;
        }
        return sumFlag && flag;
    }
}

Wall_Breaker
2.1k 声望1.2k 粉丝

生死之间,就是我的跃迁之路,全程记录,欢迎见证