public int findMin(int[] nums) {
        int i = 0, j = nums.length - 1;
        while (i <= j) {
            if (i == j) return nums[i];
            if (j - i == 1) return Math.min(nums[i], nums[j]);
            if (nums[i] < nums[j]) return nums[i];

            int mid = i + (j - i) / 2;
            if (nums[mid] > nums[i]) {
                i = mid;
            } else {
                j = mid;
            }
        }
        return nums[i];
    }