leetcode (Search Insert Position)
阿新 • • 發佈:2018-11-21
Title: Search Insert Position 35
Difficulty:Easy
原題leetcode地址:https://leetcode.com/problems/search-insert-position/
本題比較簡單,需要開始時想到二分查詢。下面給出兩種基本的解法(一般解法和二分查詢)
1. 一般解法,時間&空間複雜度如下:
時間複雜度:O(n),一層for迴圈的遍歷,遍歷整個陣列的長度。
空間複雜度:O(1),沒有申請額外的空間。
/** * 普通解法,遍歷整個陣列的長度, * 如果當前的nums[i]小於目標值target,繼續下一個nums值, * 如果大於目標值,則找到這個位置 * @param nums * @param target * @return */ public static int searchInsert(int[] nums, int target) { int flag = -1; if (nums.length <= 0 || nums == null) { flag = 0; } if (nums[0] > target) { flag = 0; } if (nums[nums.length - 1] < target) { flag = nums.length; } for (int i = 0; i < nums.length; i++) { if (nums[i] < target) { continue; } if (nums[i] >= target) { flag = i; break; } } return flag; }
2. 二分查詢,時間&空間複雜度如下:
時間複雜度:O(logn)。
空間複雜度:O(1),沒有申請額外的空間。
/** * 二分查詢 * @param nums * @param target * @return */ public static int searchInsert2(int[] nums, int target) { if (nums.length <= 0 || nums == null) { return 0; } int start = 0; int end = nums.length - 1; while (start <= end) { int middle = (start + end) / 2; if (nums[middle] == target) { return middle; } else if (nums[middle] < target) { start = middle + 1; } else { end = middle - 1; } } return start; }