題目描述

給定一個已排序的陣列ar和一個數字V,輸出陣列中元素為V的索引值。



原題網址

輸入格式

輸入有三行。第一行為一個整數V,表示要在陣列中搜尋的元素數值,範圍在-1000到1000之間(包含-1000和1000),且一定在陣列ar裡面。第二行為一個整數n,,為陣列的大小,範圍在1到1000之間(包含1和1000)。第三行有n個整數,表示陣列ar的所有元素,每個整數的範圍同整數V,且這n個數值不會重複。

輸出格式

輸出整數V在陣列ar的索引位置。

範例輸入

4
6
1 4 5 7 9 12

範例輸出

1

額外解釋

整數V為4,而4是在陣列中索引1的位置,所以輸出1。

解題概念

這題要實作數值型態的陣列搜尋,由於輸入已經是排序好的陣列,因此可以直接選擇使用線性搜尋或是更快速的二分搜尋演算法來尋找要找的目標元素。但由於這題其實已經保證了整數V一定在陣列ar裡面,而且整數V也比陣列內容還要更早就輸入,因此可以在讀取從標準輸入串流中傳進來的陣列元素數值的同時,就去判斷該索引的元素是否就是整數V,如果是的話,就可以直接輸出索引值了,而之後的輸入也可以不用理會。

參考答案

import java.util.Scanner;

public class Solution {

    public static void main(final String[] args) {
        final Scanner sc = new Scanner(System.in);

        final int V = sc.nextInt();
        final int n = sc.nextInt();
        final int[] a = new int[n];

        int index = -1;
        for (int i = 0; i < n; ++i) {
            final int ar = sc.nextInt();
            a[i] = ar;
            if (V == ar) {
                index = i;
                break;
            }
        }
        System.out.println(index);
    }
}