美文网首页
Circular Sorted Array

Circular Sorted Array

作者: 超薄智能 | 来源:发表于2018-08-05 12:47 被阅读5次

Find the head index in a circular sorted array.

  • binary search
  • use remainder in a circular is much easier
midLeftIndex = (mid-1+N)%N
midRightIndex = (mid+1)%N
// Key point:
a[headIndex]<a[midLeftIndex] && a[headIndex]<a[midRightIndex]

// My solution
// A harder way to check all the conditions without use remainder
console.log('--Binary search in circular array--');

var findHeadIndex = function (arr) {
    var headIndex = -1;
    var start = 0;
    var end = arr.length - 1;
    while (start <= end) {
        var mid = Math.floor((start + end) / 2);
        if (arr[mid] < arr[start]) {
            if (mid == start + 1) {
                headIndex = mid;
                break;
            } else {
                end = mid - 1;
            }
        } else if (arr[mid] > arr[end]) {
            if (mid == end - 1) {
                headIndex = end;
                break;
            } else {
                start = mid + 1;
            }
        } else {
            headIndex = start;
            break;
        }
        if (start == end) {
            headIndex = start;
            break;
        }
    }
    return headIndex;
}

console.log('--start testing--');
var a1 = [1, 2, 3, 4, 5, 6, 7];
var a2 = [6, 7, 1, 2, 3, 4, 5];
var a3 = [4, 5, 6, 7, 1, 2, 3];
var b1 = [1, 2, 3, 4, 5, 6, 7, 8];
var b2 = [7, 8, 1, 2, 3, 4, 5, 6];
var b3 = [4, 5, 6, 7, 8, 1, 2, 3];
var arr = [a1, a2, a3, b1, b2, b3];
var res = [];
for (var index in arr) {
    res.push(findHeadIndex(arr[index]));
};
console.log(res.join(' '));
console.log('--end--');


相关文章

网友评论

      本文标题:Circular Sorted Array

      本文链接:https://www.haomeiwen.com/subject/qdlbvftx.html