使用最小花费爬楼梯
使用最小花费爬楼梯
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。
输入:cost = [10,15,20]
输出:15
解释:你将从下标为 1 的台阶开始。
支付 15 ,向上爬两个台阶,到达楼梯顶部。总花费为 15 。
输入:cost = [1,100,1,1,1,100,1,1,100,1]
输出:6
解释:你将从下标为 0 的台阶开始。
支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。
支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。
支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。
支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
支付 1 ,向上爬一个台阶,到达楼梯顶部。总花费为 6 。-
1234567var minCostClimbingStairs = function(cos ...
错误的集合
错误的集合
集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。给定一个数组 nums 代表了集合 S 发生错误后的结果。请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
输入:nums = [1,2,2,4]
输出:[2,3]
输入:nums = [1,1]
输出:[1,2]
1234567891011121314151617var findErrorNums = function(nums) { let num1; let num2; nums.sort((a,b)=> a-b); nums.some((val, index)=>{ if(index !== nums.lastIndexOf(val)){ num1 = val; } if(nums.indexOf(index+1) === -1 ...
有效的山脉数组
有效的山脉数组
给定一个整数数组 arr,如果它是有效的山脉数组就返回 true,否则返回 false。让我们回顾一下,如果 arr 满足下述条件,那么它是一个山脉数组:arr.length >= 3在 0 < i < arr.length - 1 条件下,存在 i 使得:arr[0] < arr[1] < … arr[i-1] < arr[i]arr[i] > arr[i+1] > … > arr[arr.length - 1]
输入:arr = [2,1]
输出:false
输入:arr = [3,5,5]
输出:false
12345678910111213141516var validMountainArray = function(A) { let ALen = A.length if (ALen < 3) { return false } else { let i = 0; let j = ALen - ...
公平的糖果交换
公平的糖果交换
爱丽丝和鲍勃拥有不同总数量的糖果。给你两个数组 aliceSizes 和 bobSizes ,aliceSizes[i] 是爱丽丝拥有的第 i 盒糖果中的糖果数量,bobSizes[j] 是鲍勃拥有的第 j 盒糖果中的糖果数量。两人想要互相交换一盒糖果,这样在交换之后,他们就可以拥有相同总数量的糖果。一个人拥有的糖果总数量是他们每盒糖果数量的总和。返回一个整数数组 answer,其中 answer[0] 是爱丽丝必须交换的糖果盒中的糖果的数目,answer[1] 是鲍勃必须交换的糖果盒中的糖果的数目。如果存在多个答案,你可以返回其中 任何一个 。题目测试用例保证存在与输入对应的答案。
输入:aliceSizes = [1,1], bobSizes = [2,2]
输出:[1,2]
输入:aliceSizes = [1,2], bobSizes = [2,3]
输出:[1,2]
输入:aliceSizes = [2], bobSizes = [1,3]
输出:[2,3]-
1234567891011121314var fairCandySwap = fu ...
三角形的最大周长
三角形的最大周长
给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。
输入:nums = [2,1,2]
输出:5
解释:你可以用三个边长组成一个三角形:1 2 2。
输入:nums = [1,2,1,10]
输出:0
解释:你不能用边长 1,1,2 来组成三角形。不能用边长 1,1,10 来构成三角形。不能用边长 1、2 和 10 来构成三角形。因为我们不能用任何三条边长来构成一个非零面积的三角形,所以我们返回 0。
123456789var largestPerimeter = function(A) { A.sort((a, b) => a - b); for (let i = A.length - 1; i >= 2; --i) { if (A[i - 2] + A[i - 1] > A[i]) { return A[i - 2] + A[i - 1] + A[ ...
完全平方数
完全平方数
给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。
输入:n = 12
输出:3
解释:12 = 4 + 4 + 4
输入:n = 13
输出:2
解释:13 = 4 + 9
首先初始化长度为 n+1 的数组 dp,每个位置都为 0如果 n 为 0,则结果为 0对数组进行遍历,下标为 i,每次都将当前数字先更新为最大的结果,即 dp[i]=i,比如 i=4,最坏结果为 4=1+1+1+1 即为 4 个数字动态转移方程为:dp[i] = MIN(dp[i], dp[i - j * j] + 1),i 表示当前数字,jj 表示平方数时间复杂度:O(n∗sqrt(n))O(nsqrt(n))O(n∗sqrt(n)),sqrt 为平方根
12345678910var numSquares = function(n) { const dp = [...Array(n+1)].map( ...
验证外星语词典
验证外星语词典
某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的排列。给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false。
输入:words = [“hello”,”leetcode”], order = “hlabcdefgijkmnopqrstuvwxyz”
输出:true
解释:在该语言的字母表中,’h’ 位于 ‘l’ 之前,所以单词序列是按字典序排列的。
输入:words = [“word”,”world”,”row”], order = “worldabcefghijkmnpqstuvxyz”
输出:false
解释:在该语言的字母表中,’d’ 位于 ‘l’ 之后,那么 words[0] > words[1],因此单词序列不是按字典序排列的。
123456789101112131415161718192021222324var isAlienSorted = function(words, or ...
删列造序
删列造序
给你由 n 个小写字母字符串组成的数组 strs,其中每个字符串长度相等。这些字符串可以每个一行,排成一个网格。例如,strs = [“abc”, “bce”, “cae”] 可以排列为:abcbcecae你需要找出并删除 不是按字典序非严格递增排列的 列。在上面的例子(下标从 0 开始)中,列 0(’a’, ‘b’, ‘c’)和列 2(’c’, ‘e’, ‘e’)都是按字典序非严格递增排列的,而列 1(’b’, ‘c’, ‘a’)不是,所以要删除列 1 。返回你需要删除的列数。
输入:strs = [“cba”,”daf”,”ghi”]
输出:1
解释:网格示意如下:cbadafghi列 0 和列 2 按升序排列,但列 1 不是,所以只需要删除列 1 。
输入:strs = [“a”,”b”]
输出:0
解释:网格示意如下:ab只有列 0 这一列,且已经按升序排列,所以不用删除任何列。
1234567891011121314var minDeletionSize = function(A) { let n = A[0].length ...
质数排列
质数排列
请你帮忙给从 1 到 n 的数设计排列方案,使得所有的「质数」都应该被放在「质数索引」(索引从 1 开始)上;你需要返回可能的方案总数。让我们一起来回顾一下「质数」:质数一定是大于 1 的,并且不能用两个小于它的正整数的乘积来表示。由于答案可能会很大,所以请你返回答案 模 mod 10^9 + 7 之后的结果即可。
输入:n = 5
输出:12
解释:举个例子,[1,2,5,4,3] 是一个有效的排列,但 [5,2,3,4,1] 不是,因为在第二种情况里质数 5 被错误地放在索引为 1 的位置上。
输入:n = 100
输出:682289015
1234567891011121314151617181920212223242526272829var numPrimeArrangements = function(n) { let count = 1, pcount = 1; const dp = new Array(n+1).fill(0) dp[1] = 1; dp[2] = 1; const mod = 1e9 + ...
旋转字符串
旋转字符串
给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。s 的 旋转操作 就是将 s 最左边的字符移动到最右边。例如, 若 s = ‘abcde’,在旋转一次之后结果就是’bcdea’ 。
输入: s = “abcde”, goal = “cdeab”
输出: true
输入: s = “abcde”, goal = “abced”
输出: false
123456var rotateString = function(s, goal) { if (A.length === B.length && (A + A).includes(B)) { return true } return false};