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 ;
};