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