leetcode: поиск в повернутом отсортированном массиве - PullRequest
0 голосов
/ 29 мая 2019

Я смотрю на этот вопрос

Одно из решений похоже на this :

class Solution:
    def search(self, nums: 'List[int]', target: int) -> int:
        L, H = 0, len(nums)
        while L < H:
            M = (L+H) // 2
            if target < nums[0] < nums[M]: # -inf
                L = M+1
            elif target >= nums[0] > nums[M]: # +inf
                H = M
            elif nums[M] < target:
                L = M+1
            elif nums[M] > target:
                H = M
            else:
                return M
        return -1

Вместо использования nums[0]

Я пытался использовать числа [последний]

Вот код, который много раз пытался, не удалось заставить его работать.

var search = function(n, tar) {
    let lo = 0;
    let hi = n.length;
    let m;
    let last = n.length-1;
    const max = Number.MAX_SAFE_INTEGER;
    const min = Number.MIN_SAFE_INTEGER;

    while(lo < hi) {
        // this is index
        m = Math.floor( (lo+hi)/2 ); 

        if(tar == n[m]) {
            return m;  
        } else if(tar == n[last]) {
            return last;
        } else if(tar < n[last] && n[m] > n[last]) {
            // n[m]...........tar.....n[last]
            lo = m+1;
        } else if(tar > n[last] && n[m] < n[last]) {
            // tar........n[m]......n[last]
            hi = m;
        } else if(tar < n[last] && tar < n[m]) {
            // ...........tar, n[m], n[last]
            hi = m;
        } else if(tar < n[last] && tar < n[m]) {
            // ............n[m], tar, n[last]
            lo= m+1;
        } else if(tar > n[last] && tar < n[m]) {
            // tar, n[m].......... n[last]
            hi=m;
        } else if(tar > n[last] && tar > n[m]) {
            // n[m], tar.......... n[last]
            lo=m+1;
        } else {
            return m;
        } 
    }

    return -1;
};
...