1. 程式人生 > 實用技巧 >echarts畫雷達圖詳解

echarts畫雷達圖詳解

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需要加一

    • 我們在迴圈中已經對比過兩個端點的值了,很明顯不需要再次對比了,所以加一
  • 關於二分演算法具體可以看二分演算法