📂
LeetCode Note
  • Introduction
  • Tools
    • Clean Code
    • 英文小辭典
    • JS Reference
    • 常見 Edge Case
    • Array Method
    • Object Method
    • Function
    • Hashing
    • Prototype
    • 處理 Array 小撇步
    • String Method
    • Math / Date
    • loop
    • JSON.xx / localStorage
    • Date
    • Regex
    • Memorization
    • reduce condition
    • 命名
  • 筆記 Note
    • Promise
    • Walking the DOM
    • Element size and scrolling
    • CSS
  • Leetcode todo
    • ToDo
  • Array
    • # Select random poker without duplicates
    • # 最少替換達成不連續字串
    • # 724 Find Pivot Index
    • # 747. Largest Number At Least Twice of Others
    • # 01 getMaxProfit
    • # maxOfBiggestVal
    • # findSecondLargest
    • # 41 First Missing Positive
    • # 134 Gas Station (有圖)
    • # 202 Happy Number
    • # 344 Reverse String
    • # 412 Fizz Buzz
    • # 561 Array Partition I
    • # 804 Unique Morse Code Words
    • # 905 Sort Array By Parity
    • # 121. Best Time to Buy and Sell Stock.js
    • # 122 Best Time to Buy and Sell Stock II
    • # 189 Rotate Array
    • # 229 Majority Element II
    • # 268 Missing Number.
    • # 299 Bulls and Cows (有圖)
    • # 896 Monotonic Array
    • # 1002 Find Common Characters
    • # 1051 Height Checker
    • # 1185 Day of the Week
    • # 169 Majority Element
    • # 605. Can Place Flowers
    • # 350 Intersection of Two Arrays II (有圖)
    • # 482. License Key Formatting
  • Set / Map
    • # GetLengthOfLongestSubstring
    • #1 Two Sum
    • # 217 Contains Duplicate
    • # 1122 Relative Sort Array
    • # 1160 Find Words That Can Be Formed by Characters
    • #811 Subdomain Visit Count
    • # 349 Intersection of Two Arrays
    • # 819 Most Common Word
  • Two Pointer
    • #704. Binary Search
    • #26 Remove Duplicates from Sorted Array (有圖)
    • #27 Remove Element
    • # 66 Plus One
    • # 80 Remove Duplicates from Sorted Array II (有圖)
    • # 88 Merge Sorted Array (有圖)
    • # 125 Valid Palindrome
    • #167 Two Sum II - Input array is sorted (有圖)
    • # 283 Move Zeroes (有圖)
    • # 38 Count and Say
    • # 557. Reverse Words in a String III
    • #977 Squares of a Sorted Array
    • #209 Minimum Size Subarray Sum
  • String
    • # 13 Roman to Integer (有圖)
    • # 771 Jewels and Stones
    • # 937 Reorder Data in Log Files
    • # 929 Unique Email Addresses
    • # 1108 Defanging an IP Address
    • #14 Longest Common Prefix
    • # 387 First Unique Character in a String (有圖)
    • #193 Valid Phone Numbers
    • # 28 Implement strStr()
    • #383 Ransom Note
  • Stack
    • # 20 Valid Parentheses (有圖)
    • # 155 Min Stack
    • BF 165. remove characters
    • #1047 Remove All Adjacent Duplicates In String
  • Binary Search
    • # 1064 Fixed Point (有圖)
    • # 852 Peak Index in a Mountain Array
  • Recursion 遞迴
    • #2625. Flatten Deeply Nested Array
  • Math
    • # 7 Reverse Integer
    • # 9 Palindrome Number (有圖)
    • #53 Maximum Subarray (有圖)
    • # 1085 Sum of Digits in the Minimum Number.
    • # 136 Single Number
    • # 204 Count Primes (有圖)
    • #243 Shortest Word Distance
  • Dynamic Programing
    • # 322 Coin Change
    • # 509 Fibonacci Number (有圖)
    • # 70 Climbing Stairs
    • # 198 House Robber
    • # 168. Excel Sheet Column Title
  • Others
    • # 205. Isomorphic Strings
    • Implement js Array method
    • Flatten Array/Object
  • Matrix
    • 867. Transpose Matrix
  • Queue
    • DOM tree with queue
  • 排序
    • Different Sort
Powered by GitBook
On this page
  • Edge Case
  • 哪種資料結構解
  • 怎麼解

Was this helpful?

  1. Binary Search

# 1064 Fixed Point (有圖)

input 有順序而且又是找東西,很有可能就是考 Binary Search

Previous#1047 Remove All Adjacent Duplicates In StringNext# 852 Peak Index in a Mountain Array

Last updated 5 years ago

Was this helpful?

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 1:

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) {
    
};

Edge Case

  • 可能會有兩種以上答案,例如這種 [-10, -5, -2, 0, 4, 5, 6, 7, 8, 9, 10],題目說選最小的為 output

哪種資料結構解

有順序姓而且明顯是在搜尋,所以會用 Array,而且 input 有順序而且又是找東西,所以會用 Binary Search

怎麼解

這題比較特別的是有可能會有一種以上答案,所以會先定義 minIndex 存最小的值。

let minIndex = Number.MAX_SAFE_INTEGER;

其他部分單純用 Binary Search 解

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]))
LeetCode