DAY 24
1
Software Development

# 1064. Fixed Point

``````// Question:
// Given an array A of distinct integers sorted in ascending order, return the smallest index i // that satisfies A[i] == i.  Return -1 if no such i exists.
// 給一個裡面都包含不同數字的陣列 A，排序已經由小到大排好了。請找出符合 A[i] = i 的值
``````
``````// Example:
Input: [-10,-5,0,3,7]
Output: 3
Explanation:
For the given array, A[0] = -10, A[1] = -5, A[2] = 0, A[3] = 3, thus the output is 3.
Example 2:

Input: [0,2,5,8,17]
Output: 0
Explanation:
A[0] = 0, thus the output is 0.
Example 3:

Input: [-10,-5,3,4,7,9]
Output: -1
Explanation:
There is no such i that A[i] = i, thus the output is -1.
``````
`````` * @param {number[]} A
* @return {number}
*/
var fixedPoint = function (A) {

}
``````

### Think

#### 大概會怎麼解

``````let minIndex = Number.MAX_SAFE_INTEGER;
``````

``````mid = Math.floor((start + end) / 2); // 從中間開始找
if (mid < A[mid]) { // 2 < 0
// 往左找
end = mid - 1;
} else if (mid > A[mid]) { // 2 > 0
// 往右找
start = mid + 1 // start = 3
} else {
minIndex = Math.min(minIndex, mid);
end = mid - 1;
};
``````

#### 完整程式碼

``````var fixedPoint = function (A) {
const len = A.length;
let minIndex = Number.MAX_SAFE_INTEGER;
if (len < 1) return -1;

// 這邊都以 index 為單位
let start = 0;
let end = len - 1;

//  從中間開始切
let mid;

while (start <= end) {
mid = Math.floor((start + end) / 2);
console.log('mid: ' + mid)
if (mid < A[mid]) {
// 往左找
end = mid - 1;
} else if (mid > A[mid]) {
// 往右找
start = mid + 1
} else {
minIndex = Math.min(minIndex, mid);
end = mid - 1;
};
}
// 如果上面都不符合代表找不到
return (minIndex == Number.MAX_SAFE_INTEGER) ? -1 : minIndex;

};

console.log(fixedPoint([-10, -5, -2, 0, 4, 5, 6, 7, 8, 9, 10]))
``````
``````如有錯誤或需要改進的地方，拜託跟我說。

``````

### 1 則留言

0
mwsmartin2014
iT邦新手 5 級 ‧ 2019-09-25 11:28:46

hannahpun iT邦新手 5 級 ‧ 2019-09-25 11:47:50 檢舉