echarts畫雷達圖詳解
阿新 • • 發佈:2020-10-20
1.問題描述
給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
你可以假設陣列中無重複元素。
示例 1:
輸入: [1,3,5,6], 5
輸出: 2
示例 2:
輸入: [1,3,5,6], 2
輸出: 1
示例 3:
輸入: [1,3,5,6], 7
輸出: 4
示例 4:
輸入: [1,3,5,6], 0
輸出: 0
2.求解
暴力法
遍歷所有字串,查詢target應該在的位置
程式碼如下
/* *執行用時:0 ms, 在所有 Java 提交中擊敗了100.00% 的使用者 *記憶體消耗:37.7 MB, 在所有 Java 提交中擊敗了99.91% 的使用者 * */ public int searchInsert(int[] nums, int target) { if(nums == null || nums.length == 0){ return 0; } for(int i = 0; i < nums.length; i++){ if(nums[i] > target){ return i; } if(nums[i] == target){ return i; } } return nums.length; }
終於遇到了簡單的題,幾分鐘寫了個暴力法,發現成績還不錯
看了大佬的寫法,發現還可以繼續簡化
- 將大於等於合併為一種情況
程式碼如下
/* *執行用時:0 ms, 在所有 Java 提交中擊敗了100.00% 的使用者 * 記憶體消耗:36.6 MB, 在所有 Java 提交中擊敗了100.00% 的使用者 * */ public int searchInsert(int[] nums, int target) { int i; for(i=0;i<nums.length;i++){ if(nums[i]>=target) break; } return i; }
二分查詢
- 本題比較簡單,非常適合練習二分查詢
程式碼如下
/* *執行用時:0 ms, 在所有 Java 提交中擊敗了100.00% 的使用者 * 記憶體消耗:37.6 MB, 在所有 Java 提交中擊敗了99.94% 的使用者 * */ public int searchInsert(int[] nums, int target) { int left = 0; int right = nums.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (target > nums[mid]) { left = mid + 1; } else if (target == nums[mid]) { return mid; } else { right = mid - 1; } } return left; }
二分查詢的幾個要點
-
為什麼終止條件是
left <= right
-
在這個題中我們的搜尋區間是
[left,right]
,兩邊都是閉區間,那麼什麼時候搜尋停止呢,當left > right
時,此時搜尋區間為空,例如[3,2]
因為不存在大於3小於2的數 -
如果終止條件為
left < right
,那麼什麼時候搜尋停止呢,當left = right
時,搜尋就會停止,那麼此時搜尋區間為空了嗎,很明顯不是的,還存在一個數未被搜尋
-
-
為什麼mid需要加一
- 我們在迴圈中已經對比過兩個端點的值了,很明顯不需要再次對比了,所以加一
-
關於二分演算法具體可以看二分演算法