LeetCode -- Search Insert Position
Description:
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it wocould be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.
[1, 3, 5, 6], 5 → 2
[1, 3, 5, 6], 2 → 1
[1, 3, 5, 6], 7 → 4
[1, 3, 5, 6], 0 → 0
Given an sorted array, the system tries to find the index with the value of target. If no index is found, the system returns the position that can be inserted so that the inserted array is still in ascending order.
Ideas:
This question is still a binary method, but we only need to add processing for inserts.
Implementation Code:
public class Solution { public int SearchInsert(int[] nums, int target) { var l = 0; var r = nums.Length - 1; while(l < r - 1){ var m = (l + r) / 2; var i = GetEqualsIndex(target, nums, new[]{l,r,m}); if(i != -1){ return i; } if(target > nums[m]){ l = m; } else{ r = m; } } var index = GetEqualsIndex(target, nums, new[]{l,r}); if(index != -1){ return index; } if(target < nums[l]){ return l > 0 ? l - 1 : 0; } else if(target > nums[r]){ return r + 1; } else{ return l + 1; } } private int GetEqualsIndex(int target, int[] nums, int[] indexes) { foreach(var i in indexes){ if(nums[i] == target){ return i; } } return -1; } }