/*
 * 演算法 / Algorithm:
 *   與 C 版本完全相同的二分搜尋邏輯，用 STL vector<int> 取代原始指標。
 *   Same binary search as the C version, but using std::vector<int> instead of a raw pointer.
 *   Time O(log n), Space O(1).
 */

#include <vector>                            // 提供 std::vector / provides std::vector

class Solution {
public:
    int findMin(std::vector<int>& nums) {    // vector<int>& 是動態陣列的參考 / reference to a dynamic array
                                             // 用參考避免拷貝整個陣列 / passed by reference to avoid copy
        int lo = 0;                          // 左端點 / left endpoint
        int hi = static_cast<int>(nums.size()) - 1;
                                             // size() 回傳 size_t (unsigned)，轉成 int 較安全 / cast to int
                                             // because mixing signed/unsigned can bite beginners

        while (lo < hi) {                    // 區間還有 > 1 個元素 / more than one element left
            int mid = lo + (hi - lo) / 2;    // 防溢位中點 / overflow-safe midpoint
            if (nums[mid] > nums[hi]) {      // mid 在左段(較大) / mid is in the left (larger) segment
                lo = mid + 1;                // 最小值在右邊 / minimum is to the right
            } else {                         // mid 在右段或未旋轉 / mid is in right segment (or unrotated)
                hi = mid;                    // 答案在 mid 或其左 / answer is at mid or to its left
            }
        }
        return nums[lo];                     // lo == hi 即為最小值位置 / lo == hi marks the minimum
    }
};
