1. 程式人生 > 實用技巧 >[程式設計題] 打印出失序的執行緒ID--位元組跳動筆試題

[程式設計題] 打印出失序的執行緒ID--位元組跳動筆試題

打印出失序的執行緒ID

題目描述

輸入一個正整數n.表示接下來有n行數字,每行一個數字(不重複,可能無序),表示執行緒id,輸出未出現的失序的執行緒ID

n的大小是小於等於2的32次方

示例

例如1:

輸入(輸入的執行緒ID不一定有序)
5
2
3
4
5
6
輸出:
1

例如2:

輸入:
4
1
2
3
4
輸出:
5

Java程式碼

package ncompanydemos.p2_bytedance;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author jiyongjia
 * @create 2020/7/4 - 14:26
 * @descp: 輸入一個數n.表示接下來有n行數字,每行一個數字,表示執行緒id,輸出未出現的失序的執行緒ID
 */
public class Exam01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int total = scanner.nextInt();

        int[] arr = new int[total];
        int cur;
        for (int i = 0; i < total; i++) {
            cur=scanner.nextInt();
            arr[i] = cur;
        }
        //呼叫
        int solve = solve(arr);
        System.out.println(solve);
    }

    public static int solve(int[] arr){
        //對陣列排序、
        Arrays.sort(arr);

        //邊界判斷

        if(arr.length!=1 && arr[0]!=1){
            return 1;
        }

        int cur=0;
        int next=0;
        for (int i = 0; i < arr.length-1; i++) {
            cur = arr[i];
            next = arr[i+1];
            if(next-cur==1){
                continue;
            }else{
                return ++cur;
            }
        }

        //邊界判斷
        if(arr[arr.length-1]-arr[arr.length-2]==1){
            return ++arr[arr.length-1];
        }else{
            return ++arr[arr.length-2];
        }

    }
}

測試輸出

測試1:

輸入:
5
2
3
1
6
4
輸出:
5

測試2:

輸入:
5
1
2
3
4
5
輸出:
6

測試3: