2020哔哩哔哩校招后端开发笔试编程题总结

2020哔哩哔哩校招后端开发笔试编程题总结

1.给定一个正整数N,试求有多少组连续正整数满足所有数字之和为N? (1 <= N <= 10 ^ 9)
暴力求解法:

package Day44;

/**
 * @Author Zhongger
 * @Description 给定一个正整数N,试求有多少组连续正整数满足所有数字之和为N? (1 <= N <= 10 ^ 9)
 * @Date 2020.3.17
 */
public class FindSumIsNSolution {
    public static void main(String[] args) {
        System.out.println(new FindSumIsNSolution().getSum(100));
    }

    public int getSum(int n){
        if (n<1||n>Math.pow(10,9)){
            return 0;
        }
        int count=0;
        for (int i = 1; i < n/2+1; i++) {
            int curSum=0;
            int curVal=i;
            while (curSum<n){
                curSum+=curVal;
                curVal++;
            }
            if (curSum==n){
                count++;
            }
        }
        return count;
    }
}

2.从标准输入读取字符串,按照指定的两层分隔符切分成多对key-value,依次输出到标准输出中。
注意:仅输出key和value都为非空串的pair。
输入描述:
每一行有效输入为三列,列之间以 ’ ’ 分隔,第一列表示key_value_pairs_delimiter,第二列表示key_value_delimiter,第三列表示待切分的字符串。分隔符 ’ ’ 不会出现在列内容中。
输入样例:

# : a:3#b:8#c:9

输出描述:
先输出有效key-value对的个数(单独一行);再依次输出key-value对,每一对单独成行,以’ ‘分隔key和value。
输出样例:

3
a 3
b 8
c 9

思路也不难,运用Java的字符串处理函数很容易写出来的

package Day44;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;

/**
 * @Author Zhongger
 * @Description 从标准输入读取字符串,按照指定的两层分隔符切分成多对key-value,依次输出到标准输出中。
 * 注意:仅输出key和value都为非空串的pair。
 * @Date 2020.3.17
 */
public class SplitStringToKVSolution {
    public static void main(String[] args) {
        SplitStringToKVSolution splitStringToKVSolution = new SplitStringToKVSolution();
        String string = splitStringToKVSolution.getString();
        splitStringToKVSolution.printKeyValue(string);
    }
    
    public String getString(){
        Scanner scanner = new Scanner(System.in);
        return scanner.nextLine();
    }
    
    public void printKeyValue(String str){
        String[] strings = str.split(" ");//以' '为分隔符
        String key_value_pairs_delimiter = strings[0]; //每个k-v对之间的分隔符
        String key_value_delimiter = strings[1];//k与v的分隔符
        String kvStr=strings[2];//待处理的串
        String[] eachKVStrs = kvStr.split(key_value_pairs_delimiter);//键值对数组,其中每个元素为键值对
        int count=0;//有效键值对的个数
        HashMap<String, String> map = new HashMap<>();//存放键值对
        for (String eachKVStr : eachKVStrs) {//遍历拿到每个键值对
            String[] kvs = eachKVStr.split(key_value_delimiter);//拿到键、值数组
            if (kvs.length==2){//有效的键值对
                count++;
                map.put(kvs[0],kvs[1]);
            }
        }
        System.out.println(count);
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry<String, String> entry = iterator.next();
            System.out.println(entry.getKey()+" "+entry.getValue());
        }
    }
}

运行结果如下:
在这里插入图片描述

3.给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。
你总共三种操作方法:

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

(这题我不会,需要用到动态规划,等我学完后再来做这题~)

猜你喜欢

转载自blog.csdn.net/weixin_43395911/article/details/104921525