科大訊飛 2020校招 提前批筆試

科大訊飛 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);
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章