LeetCode_04:Search Insert Position

1、总结:
  • 感觉自己每次想出一种解法,就很难再有别的解决方案了,知识储备还是太少;
  • 对于时间复杂度和空间复杂度的计算还是不敏感,没有准确的概念。尤其是想要优化代码空间复杂度的时候,感觉无从下手,基本全靠学习他人的解决方法。
2、题目:

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

You may assume no duplicates in the array.

Example 1:

Input: [1,3,5,6], 5
Output: 2

Example 2:

Input: [1,3,5,6], 2
Output: 1

Example 3:

Input: [1,3,5,6], 7
Output: 4

Example 4:

Input: [1,3,5,6], 0
Output: 0
3、我的解决方法:

依旧延续以往的风格,用最基础的代码实现功能,再考虑优化(感觉可能要等二刷的时候才知道怎么优化了?)

	var searchInsert = function(nums, target) {
	    let result = 0;
	    for(let i = 0; i < nums.length; i++) {
	        if(target > nums[i]) {
	            result++;
	            continue;
	        }
	        if(target == nums[i]) {
	            return i;
	        }
	        if(target < nums[i]) {
	            return result;
	        }
	    }
	    return result;
	};

简化写法:

	var searchInsert = function(nums, target) {
	    for(let i = 0; i < nums.length; i++) {
	        if(target <= nums[i]) {
	            return i;
	        }
	    }
	    return nums.length;
	};
4、其他人的解法

第一个解法有点快速排序算法的意思:

	// 方法三:
	// 这个方法有一种快速排序算法的意思
	var searchInsert = function(nums, target) {
	    if(nums === null) {
	        return -1;
	    }
	    
	    left = 0;
	    right = nums.length-1;
	    while(left <= right) {
	        mid = Math.floor((left+right)/2);
	        if(nums[mid] === target) {
	            return mid;
	        }
	        else if(target < nums[mid]) {
	            right = mid - 1;
	        }
	        else{
	            left = mid + 1;
	        }
	    }
	    
	    return left;
	};

还有另外一种解法,如果在target元素已存在的情况下有优势,否则的话感觉有点鸡肋:

	var searchInsert = function(nums, target) {
	    let out = nums.indexOf(target);
	    if (out == -1){
	        let i = 0
	        for (; target > nums[i] ; i++){};
	        out = i;
	    }
	    return out ;
	};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值