來刷 LeetCode 吧! 16 35. Search Insert Position
LeetCode
題目分析
給一個排序後 array、一個 target,回傳 target 在 array 中的位置。
若 array 找不到 target,回傳 target 應該插入在 array 中的位置。
第一直覺
- 遍歷 nums
- 若找到 nums[i] ≥ target 代表為 target 應插入的位置
- 若遍歷完未找到,代表 target 大於 nums 所有元素,應放在最後
var searchInsert = function (nums, target) { for (let i = 0; i < nums.length; i++) { if (nums[i] >= target) { return i; } } return nums.length; };
二分法
- 找到 nums 的中間點
- 對中間點進行判斷
- 二分法的時間複雜度為 O( log n ),線性搜索為 O( n )
var searchInsert = function (nums, target) { // 找到 nums 的頭、尾 left = 0; right = nums.length - 1; // while (left <= right) { mid = Math.floor((left + right) / 2); if (nums[mid] === target) { return mid; } else if (nums[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return left; };