package _interview_question /** * Check if a given target element is found in the infinite long sorted array. * */ class Solution8 { /** * solution: binary search * 1. find proper bound * 2. apply binary search * */ fun checkElement(nums: IntArray, target: Int): Int { var l = 0 var h = 1 var value = nums[0] //because nums is infinite size, so there is not index out of bound checking while (value < target) { l = h//store previous h to improve the time complexity in binarySearch //check that h*2 not exceeds length of array to prevent OutOfBoundsException if (h * 2 < nums.size-1) { h *= 2 } else { h = nums.size - 1 } //update the value value = nums[h] } return binarySearch(nums,l,h,target) } private fun binarySearch(nums: IntArray, left: Int, right: Int, target: Int): Int { if (right >= left) { val mid = left + (right - left) / 2 if (nums[mid] == target) { return mid } else if (nums[mid] > target) { //search in left side return binarySearch(nums, left, mid - 1, target) } else { return binarySearch(nums, mid + 1, right, target) } } return -1 } }