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的最少操作次数。
你总共三种操作方法:
- 插入一个字符
- 删除一个字符
- 替换一个字符
(这题我不会,需要用到动态规划,等我学完后再来做这题~)