![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 53
没事我就爱吃肉包
抓住流星,交出心灵
展开
-
LeetCode-375.猜数字大小
题目描述思路这是一道dp的题目,我们用dp(i, j)表示在范围[i, j]内确保胜利的最少金额,那么目标就是计算dp(1, n)假设第一次猜的数字是x且猜错了,那么需要先支付金额x, 然后继续猜。那么就有两种情况:当x大于所选的数字, 那么为了确保胜利,还需要支付dp(1, x - 1)当x小于所选的数字,那么为了确保胜利,还需要支付do(x + 1, n)为了确保任何情况下都能保证胜利,就应该考虑最坏的情况,也就是要取上述两种情况的最大值,即dp(1, n) = x + max(d原创 2021-11-12 19:26:52 · 288 阅读 · 0 评论 -
LeetCode-64.最小路径和
题目描述给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。思路设dp为大小为 m x n的矩阵,dp[i][j]代表直到走到(i,j)这个点的最小路径和题目要求,只能向右或向下走,换句话说,当前单元格 (i,j) 只能从左方单元格 (i-1,j)(i−1,j) 或上方单元格 (i,j-1)走到,因此只需要考虑矩阵左边界和上边界。那么, 走到当前单元格 (i,j)的最小路径和 == “从左方单元原创 2021-11-10 21:23:39 · 165 阅读 · 0 评论 -
LeetCode-869.重新排列得到2的幂
题目描述给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。思路这题的思路结合了leetcode-47.全排列-Ⅱleetcode-231.2的幂所以,建议先把这两题做了做完后会发现,这题的解题思路就是:对于给定整数N,我们可以对其进行全排列(去重,去前导数字为0),然后对结果集的每个排列结果,进行判断是否为2的幂。代码实现(py3)"""给定正整数 N ,我们按任原创 2021-10-29 20:27:41 · 253 阅读 · 0 评论 -
LeetCode-47.全排列Ⅱ
题目描述给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。思路本题在leetcode-46.全排列的基础上加上了去除重复排列的限制,大体思路一样,只是在构建排列树时,我们需要进行减枝。一个比较容易想到的办法是在结果集中去重。但是问题来了,这些结果集的元素是一个又一个列表,对列表去重不像用哈希表对基本元素去重那样容易。如果要比较两个列表是否一样,一个容易想到的办法是对列表分别排序,然后逐个比对。既然要排序,我们就可以 在搜索之前就对候选数组排序,一旦发现某个分支搜索下去可能原创 2021-10-29 20:17:52 · 189 阅读 · 0 评论 -
LeetCode-46.全排列
题目描述给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。解题思路这是一个回溯问题,我们可以采用dfs构建排列树来求解。用path来表示一次排列的结果集,used表示输入序列nums中每个元素的使用情况,res表示最终包含所有全排列集合的结果集,depth表示排列树的层数。以测试用例:[1,2,3]为例,构建如下排列树上面提到,我们用path保存一次排列的结果,那么当每次构建到叶子节点时,那么就说明我们找到了一个排列,那么就可以把这个排列即pat原创 2021-10-29 16:45:32 · 147 阅读 · 0 评论 -
LeetCode-231.2的幂
题目描述给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。解题思路首先排除掉n为负数的情况,接下来就很简单,只需要把n不断除以2并求2的模,看一下模2结果是否为0,若是0,则是2的幂,反之则不是。为什么要模2呢?其实,模2的操作,就是看当前数是否为偶数,只要是2的幂,那么每次除以2的操作后,必定是偶数,如果是奇数,说明它必定不是2的模。我们以6为例:6/2=3为奇数原创 2021-10-29 16:21:07 · 127 阅读 · 0 评论 -
LeetCode-1493.删掉一个元素以后全为 1 的最长子数组
题目描述给你一个二进制数组 nums ,你需要从中删掉一个元素。请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。如果不存在这样的子数组,请返回 0 。输入样例提示解题思路根据题目意思,我们可以把问题的解决分为两个步骤:1.找出所有连续1的段2.看看他们能不能结合什么意思呢?看下图假设输入为[0, 1, 1, 1, 0, 1, 1, 0, 1]显然,连续1的段有上图3段;接下来,我们记录这3段中最大的一段的长度,即3(最长子数组);然后,我们需要看看这三个原创 2021-10-25 14:26:20 · 440 阅读 · 0 评论 -
剑指offer16.数值的整数次方
题目描述实现pow(x,n),即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。提示:-100.0 <x< 100.0 -231<= n <=231-1 -104<= xn<= 104示例:朴素思路最简单是思路是直接用一层循环(or 递归),可惜会越界,最后几个测试用例通不过# 这样写会越界,贴出来只是为了记录一下class Solution(object): def m...原创 2021-10-23 10:40:51 · 88 阅读 · 0 评论 -
猴子选大王(约瑟夫环)问题
问题描述一群猴子一共TOTAL只,需要选出一个猴王,于是它们站成一圈,约定从1开始报数,报到NUMBER时就出局一只猴子,接着继续从1开始报数。直到剩下一只猴子的时候,它就是猴王。输入TOTAL:猴子总数NUMBER:出局的报数(报到NUMBER出局)输出猴王的编号思路可以用链表也可以用数组,这里采用数组。根据TOTAL创建数组,每个元素都置1,循环遍历,并设置计数器模拟报数。报数到NUMBER把当前元素置0,即出局。最重要的一点是,每当出局一个猴子,需要把计数器重置(超原创 2021-09-18 10:13:09 · 683 阅读 · 0 评论