leetcode-164周赛-1269-停在原地的方案数

题目描述:

自己的提交:

class Solution:
    def numWays(self, steps: int, arrLen: int) -> int:
        l = min(steps,arrLen)
        dp = [0] * l
        dp[0] = 1
        MOD = 10 ** 9 + 7
        for step in range(steps):
            dp_ = dp[:]
            for i in range(len(dp)):
                if i == 0:
                    dp_[i] = (dp[i] + dp[i+1]) % MOD
                elif i == len(dp) - 1:
                    dp_[i] = (dp[i] + dp[i-1]) % MOD
                else:
                    dp_[i] = (dp[i-1] + dp[i] + dp[i+1]) % MOD
            dp = dp_
        return dp[0]

另:

class Solution:
    def numWays(self, steps: int, arrLen: int) -> int:
        l = min(steps,arrLen)
        dp = [0] * l
        dp[0] = 1
        MOD = 10 ** 9 + 7
        for step in range(steps):
            dp_ = [0] * l
            for i in range(len(dp)):
                for j in [-1,0,1]:
                    if 0 <= i+j < l:
                        dp_[i] += dp[i+j]
                dp_[i] %= MOD
            dp = dp_

        return dp[0] 

原文地址:https://www.cnblogs.com/oldby/p/11929036.html

时间: 2024-11-25 05:43:07

leetcode-164周赛-1269-停在原地的方案数的相关文章

LeetCode 1269. 停在原地的方案数 (DP)

题目 有一个长度为 arrLen 的数组,开始有一个指针在索引 0 处. 每一步操作中,你可以将指针向左或向右移动 1 步,或者停在原地(指针不能被移动到数组范围外). 给你两个整数 steps 和 arrLen ,请你计算并返回:在恰好执行 steps 次操作以后,指针仍然指向索引 0 处的方案数. 由于答案可能会很大,请返回方案数 模 10^9 + 7 后的结果. 示例1: 输入:steps = 3, arrLen = 2 输出:4 解释:3 步后,总共有 4 种不同的方法可以停在索引 0

LeetCode双周赛10

Leetcode双周赛10 5079.三个有序数组的交集 给出三个均为 严格递增排列 的整数数组 arr1,arr2 和 arr3. 返回一个由 仅 在这三个数组中 同时出现 的整数所构成的有序数组. 示例: 输入: arr1 = [1,2,3,4,5], arr2 = [1,2,5,7,9], arr3 = [1,3,4,5,8] 输出: [1,5] 解释: 只有 1 和 5 同时在这三个数组中出现. 提示: 1 <= arr1.length, arr2.length, arr3.length

Leetcode 164 数组最大间隔(线性复杂度实现)//Python

LeetCode 地址:https://leetcode.com/problems/maximum-gap/description/ 题目描述 给定一个未排序数组,找出排序后的元素之间的最大间隔. 要求用线性时间复杂度实现. 例如:输入为[3,6,9,1,10],输出应为最大间隔3. 题目分析 线性时间复杂度实现,就说明不能先对元素进行排序,因为采用此法复杂度为O(n?log(n)) 思路是采用桶排序的方法. 首先,求随机数组中的最大元素 , 最小元素,为线性时间复杂度: 然后,在最大元素和最小

Leetcode 179周赛小结

5352. 生成每种字符都是奇数个的字符串 给你一个整数 n,请你返回一个含 n 个字符的字符串,其中每种字符在该字符串中都恰好出现 奇数次 . 返回的字符串必须只含小写英文字母.如果存在多个满足题目要求的字符串,则返回其中任意一个即可. 题解:奇数全填某个字符,偶数先填n-1个字符再填一个不同的字符就可以了. 5353. 灯泡开关 III 题解:顺序遍历题目给的开灯序列.定义两个指针,pos,max_open.pos指向的位置以及其之前的位置所有的灯都是开着的,max_open指向到目前为止,

leetcode 164:Maximum Gap

题意: 给定非排序数组,找出其排序后相邻元素的最大差值. 线性时间空间.元素数少于2时返回0.元素值非负且int范围内. 思路: 排序最快nlogn不符合要求: 参考网上,学习了桶排序的方法: 桶排序:按值分段处理: 设定桶大小和桶个数: 因为ans>=(MAX-MIN)/(len-1): 桶大小:(MAX-MIN)/(len-1)向上取整,(注意为0时取1) 桶个数:(MAX-MIN)/桶大小+1: ans取值只可能是桶A的最小值-桶B的最大值形式:不会在桶内取:(因为桶内最大差值小于桶大小)

leetcode 双周赛 Biweekly Contest 6

最后一题比赛快结束的时候想到怎么做了(通过WA的数据猜出来的),比赛后10分钟做出来的.最终做了3题,时间1个小时左右吧. 1150. Check If a Number Is Majority Element in a Sorted Array 这道题理论应该用二分,但是数据量很小(1000),所以就直接暴力过了: class Solution { public: bool isMajorityElement(vector<int>& nums, int target) { int

leetcode 双周赛9 进击的骑士

一个坐标可以从 -infinity 延伸到 +infinity 的 无限大的 棋盘上,你的 骑士 驻扎在坐标为 [0, 0] 的方格里. 骑士的走法和中国象棋中的马相似,走 “日” 字:即先向左(或右)走 1 格,再向上(或下)走 2 格:或先向左(或右)走 2 格,再向上(或下)走 1 格. 每次移动,他都可以按八个方向之一前进. 现在,骑士需要前去征服坐标为 [x, y] 的部落,请你为他规划路线. 最后返回所需的最小移动次数即可.本题确保答案是一定存在的. 示例 1: 输入:x = 2,

leetcode 双周赛9 找出所有行中最小公共元素

给你一个矩阵 mat,其中每一行的元素都已经按 递增 顺序排好了.请你帮忙找出在所有这些行中 最小的公共元素. 如果矩阵中没有这样的公共元素,就请返回 -1. 示例: 输入:mat = [[1,2,3,4,5],[2,4,5,8,10],[3,5,7,9,11],[1,3,5,7,9]] 输出:5 解法: 暴力解法  就是使用哈希记录每行 然后比较 代码 class Solution { public: unordered_map<int, int> umap[510]; int smalle

leetcode 156周赛(python)

两周了,第一次独立写完四个题目,开心(当然... 不是在考试时间内写完的,主要还是四个题知识图谱内,而且还不难吧),加油! 独一无二的出现次数 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数. 如果每个数的出现次数都是独一无二的,就返回 true:否则返回 false. 示例 1: 输入:arr = [1,2,2,1,1,3] 输出:true 解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次.没有两个数的出现次数相同. 提示: 1 <= arr.len