题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
输入: nums = [1,3,5,6], target = 5 输出: 2
题解
我们根据题意来进行操作,进入函数后我们先声明一个index
变量,在对出参nums
使用indexOf
方法,indexOf
方法中接受的参数是出参target
,我们将indexOf
方法的返回值赋值给index
变量,如果indexOf
方法没有在出参nums
中找到出参target
则返回-1
,接下来我们使用if
语句进行判断当前index
变量是否等于-1
,如果与-1
相等则是没有找到出参target
,我们则使用push
方法将出参target
添加到出参nums
的末尾,然后在使用sort
方法对出参nums
进行升序排序,排完序之后,在对出参nums
使用indexOf
方法进行查找出参target
,并直接将indexOf
方法的返回值返回出去,如果index
变量不等于-1
,我们则直接将index
变量返回即可
/** * @param {number[]} nums * @param {number} target * @return {number} */ var searchInsert = function(nums, target) { var index = nums.indexOf(target); if(index == -1){ nums.push(target); nums.sort((a,b)=> a-b) return nums.indexOf(target); } return index; };
我们这里还可以使用for
循环的方式进行实现,我们对出参nums
进行循环,在循环中我们先判断当前出参nums
循环中的值和出参target
是否相等,如果相等则直接返回变量i
,如果不相等则去比较出参nums
循环中的值是否比出参target
大,如果是则直接返回变量i
,如果上述条件不满足则去比较出参nums
循环中的值是否大于或等于出参target
,如果是则直接返回变量i
,当循环结束后如果都没有返回值,则直接将当前出参nums
的数据长度返回出去即可
/** * @param {number[]} nums * @param {number} target * @return {number} */ var searchInsert = function(nums, target) { for (let i = 0; i < nums.length; i++) { if (nums[i] == target) { return i; } if (nums[i] > target) { return i; } if (nums[i] >= target) { return i; } } return nums.length; };