天天看點

面試題 08.03. 魔術索引

連結

魔術索引。 在數組A0...n-1中,有所謂的魔術索引,滿足條件Ai = i。給定一個有序整數數組,編寫一種方法找出魔術索引,若有的話,在數組A中找出一個魔術索引,如果沒有,則傳回-1。若有多個魔術索引,傳回索引值最小的一個。

示例 1:

輸入:nums = [0, 2, 3, 4, 5]
 輸出:0
 說明: 0下标的元素為0           

複制

示例 1:

輸入:nums = [1, 1, 1]
 輸出:1           

複制

func findMagicIndex(nums []int) int {

	res := 0
	var min = math.MaxInt32
	for i := range nums {
		if i == nums[i] {
			res = i
		} else {
			continue
		}
		if res <= min {
			min = res
		}
	}

	if min == math.MaxInt32 {
		return -1
	}

	return min

}


func findMagicIndex2(nums []int) int {

 for i:=0 ; i< len(nums); i++{
        if nums[i] == i{
            return i
        }else if nums[i] > i{ // 如果nums[i] > i, 說明 i 至少為 nums[i] 時才可能有結果
            i = nums[i] - 1
        }
    }
    return -1 

}           

複制