码迷,mamicode.com
首页 > 其他好文 > 详细

1060. Missing Element in Sorted Array

时间:2020-07-19 00:49:27      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:result   exit   iter   tar   star   most   index   prime   com   

package LeetCode_1060

/**
 * 1060. Missing Element in Sorted Array
 * (Prime)
 * Given a sorted array A of unique numbers, find the K-th missing number starting from the leftmost number of the array.

Example 1:
Input: A = [4,7,9,10], K = 1
Output: 5
Explanation:
The first missing number is 5.

Example 2:
Input: A = [4,7,9,10], K = 3
Output: 8
Explanation:
The missing numbers are [5,6,8,...], hence the third missing number is 8.

Example 3:
Input: A = [1,2,4], K = 3
Output: 6
Explanation:
The missing numbers are [3,5,6,7,...], hence the third missing number is 6.

Note:
1 <= A.length <= 50000
1 <= A[i] <= 1e7
1 <= K <= 1e8
 * */
class Solution {
    /*
    * solution 1: iterate, Time complexity:O(n), Space complexity:O(1)
    * solution 2: binary search, Time complexity:O(logn), Space complexity:O(1)
    * */
    fun getKMissingNumber(nums: IntArray, k: Int): Int {
        //Solution 1:
        val n = nums.size
        var count = k
        var difference = 0
        for (i in 1 until n) {
            //save the difference
            difference = nums[i] - nums[i - 1] - 1
            if (difference >= count) {
                return nums[i - 1] + count
            } else {
                count -= difference
            }
        }
        //the range out of array
        return nums[nums.lastIndex] + count
    }
}
fun getKMissingNumber(nums: IntArray, k: Int): Int {
//Solution 2:
        val n = nums.size
        val missing = nums[n - 1] - nums[0] - (n - 1 - 0)
        //If the missing numbers count of the whole array < k, then missing number must be after nums[n-1].
        //then: res = nums[n-1] + missingCount.
        if (missing < k) {
            println("result:${nums[n - 1] + k - missCount(nums, n - 1)}")
            return nums[n - 1] + k - missCount(nums, n - 1)
        }
        var left = 0
        var right = n - 1
        while (left < right) {
            val mid = left + (right - left) / 2
            if (missCount(nums, mid) < k) {
                //fall in right side
                left = mid + 1
            } else {
                right = mid - 1
            }
        }
        println("result2:${nums[left - 1] + k - missCount(nums, left - 1)}")
        return nums[left - 1] + k - missCount(nums, left - 1)
}

 //for example: 4,(5,6),7 -- > 7 - 4  - (1 - 0) = 3 - 1 = 2;
    private fun missCount(nums: IntArray, index: Int): Int {
        return nums[index] - nums[0] - index
    }

 

1060. Missing Element in Sorted Array

标签:result   exit   iter   tar   star   most   index   prime   com   

原文地址:https://www.cnblogs.com/johnnyzhao/p/13337940.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!