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; } }