科大讯飞 2020校招 提前批笔试
无力吐槽,编程题是人工阅卷,而且没有输入输出,调试半天
第一题
题目意思:寻找输入字符串中的数字,并按升序排序,桶排序思想
import java.util.Scanner;
/**
* @author HGS
* @date 2019/08/16
*/
public class XunFei01 {
public static void main(String args[]) {
// Scanner sc = new Scanner(System.in);
// String s = sc.nextLine();
String s = "爱讯飞789swr1wwen34ifly65tek";
int[] res = new int[10];
int len = s.length();
for (int i = 0; i < len; i++) {
char temp = s.charAt(i);
if (temp >= '0' && temp <= '9') {
res[temp - '0']++;
}
}
boolean isHaveNum = false;
for (int i = 0; i < 10; i++) {
if (res[i] != 0) {
isHaveNum = true;
}
}
if (isHaveNum) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < res[i]; j++) {
System.out.print(i);
}
}
} else {
System.out.println("-1");
}
}
}
第二题
题目意识:二分查找一个数组中的数字,要求必须用递归
import java.util.Scanner;
/**
* @author HGS
* @date 2019/08/16
*/
public class XunFei02 {
private static boolean isFind;
private static int idx;
public static int findNum(int[] nums, int num) { // 找到索引位
if (nums == null || nums.length == 0) {
return -1;
}
int len = nums.length;
findNum(nums, 0, len - 1, num);
return idx;
}
public static void findNum(int[] nums, int l, int r, int num) {
if (isFind || l > r) {
return;
}
int cur = (l + r) >> 1; // 取区间的中间值
if (nums[cur] == num) {
idx = cur;
isFind = true;
return;
}
findNum(nums, l, cur - 1, num);
findNum(nums, cur + 1, r, num);
}
public static void main(String args[]) {
// Scanner sc = new Scanner(System.in);
// String s = sc.nextLine();
String s = "{11,13,15,17,19,21}";
int len = s.length();
String substring = s.substring(1, len - 1); // 去掉输入的 {}
String[] strings = substring.split(","); // 以 "," 分割
int[] nums = new int[strings.length];
for (int i = 0; i < strings.length; i++) { // 得到 nums 数组
nums[i] = Integer.valueOf(strings[i]);
}
int num = 19; // 要在数组中寻找的值
isFind = false;
idx = -1;
System.out.println(findNum(nums, num) + 1);
}
}