LeetCode刷题之旅(简单-11):搜索插入位置

2019年5月20日

目录

题目:

解决方法1:

性能结果:

小结:

解决方法2:

性能结果:

解决方法3:

性能结果:

小结:


题目:

LeetCode刷题之旅(简单-11):搜索插入位置_第1张图片

解决方法1:

package leetCode;

/**
 * Date: 2019/5/20 21 :37
 */

public class SearchForInsertionLocation {
    public static void main(String[] args){
        int[] nums  = {1,3,5,6};
        int target = 0;
        int result = searchInsert(nums, target);
        System.out.println("result="+result);
    }
    public static int searchInsert(int[] nums, int target) {
        if (nums.length == 0){
            return 0;
        }
        // 1.设置比较次数
        int count = 0;
        for (int index = 0;index < nums.length;index++){
            // 2.元素与目标相等,或元素比目标大
            if(nums[index] == target || nums[index] > target){
                return index  ;
            }else if(nums[index] < target){
                // 3.比较次数加一
                count++;
            }
        }
        return count;
    }
}

性能结果:

LeetCode刷题之旅(简单-11):搜索插入位置_第2张图片

小结:

  • 这次比较简单,因为解决思路很清晰:比较每个元素与目标值即可;
  • 遍历整个数组 ( 最优时间复杂度O(1),最坏O(n) )

 

解决方法2:

    public static int searchInsert(int[] nums,int target){
        int len = nums.length;
        if (len == 0) {
            return 0;	// if the nums is empty, return 0
        }
        for(int i = 0; i < len; i++) {
            if(target <= nums[i]) {  //  when target <= nums[i] , return
                return  i;
            }
        }
        return len;
    }

性能结果:

LeetCode刷题之旅(简单-11):搜索插入位置_第3张图片

 

解决方法3:

二分查找

class Solution {
    public int searchInsert(int[] nums, int target) {
          // 1.设置左右边界值
        int left = 0;
        int right = nums.length;

        while (left < right) {
            // 2.取中间值mid = left + 差距一半
            int mid = left + (right - left) / 2;

            // 3.比较两值,根据结果设置左右边界
            if (nums[mid] < target) {
                left = mid + 1;
            }else {
                right = mid;
            }
        }
        return left;
    }
}

性能结果:

LeetCode刷题之旅(简单-11):搜索插入位置_第4张图片

小结:

  • 二分查找法, 2的logn次方等于n,最坏时间复杂度为O(logn),最优O(1) ;

 

你可能感兴趣的:(LeetCode题库)