1. 搜寻插入地位
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按程序插入的地位。
请必须应用工夫复杂度为 O(log n) 的算法。
示例 1:
输出: nums = [1,3,5,6], target = 5
输入: 2
示例 2:
输出: nums = [1,3,5,6], target = 2
输入: 1
/** * @param {number[]} nums * @param {number} target * @return {number} */var searchInsert = function(nums, target) { if(nums.includes(target)){ // 存在间接查找索引 return nums.findIndex(v => v === target) }else{ // 不存在push进去排序后再查找索引 nums.push(target); return nums.sort((a,b) => a-b).findIndex(v => v === target) }};
2. 最大子数组和
给你一个整数数组 nums ,请你找出一个具备最大和的间断子数组(子数组起码蕴含一个元素),返回其最大和。
子数组 是数组中的一个间断局部。
示例 1:
输出:nums = [-2,1,-3,4,-1,2,1,-5,4]
输入:6
解释:间断子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:
输出:nums = [1]
输入:1
/** * @param {number[]} nums * @return {number} */var maxSubArray = function(nums) { //首先对数组进行遍历,以后最大间断子序列和为 sum,后果为 ans //如果 sum > 0,则阐明 sum 对后果有增益成果,则 sum 保留并加上以后遍历数字 //如果 sum <= 0,则阐明 sum 对后果无增益成果,须要舍弃,则 sum 间接更新为以后遍历数字 //每次比拟 sum 和 ans的大小,将最大值置为ans,遍历完结返回后果; let ans = nums[0]; let sum = 0; for(const num of nums) { if(sum > 0) { sum += num; } else { sum = num; } ans = Math.max(ans, sum); console.log(sum,ans) } return ans;};
3. 最初一个单词的长度
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最初一个 单词的长度。
单词 是指仅由字母组成、不蕴含任何空格字符的最大子字符串。
示例 1:
输出:s = "Hello World"
输入:5
解释:最初一个单词是“World”,长度为5。
示例 2:
输出:s = " fly me to the moon "
输入:4
解释:最初一个单词是“moon”,长度为4。
/** * @param {string} s * @return {number} */var lengthOfLastWord = function(s) { //去除前后空格后把所有的空格都换成一个空格,再拆分成数组,取最初一个的元素的长度 let arr = s.trim().replace(/\s+/g,' ').split(' '); return arr[arr.length - 1].length};