leetcode 518 零钱兑换2 分析题目:硬币是可以无限次使用,题目要求是得组成硬币的组合方式个数, 所以dp[n]状态表示的是 当目标值是 n 的时候,所能组成的组合方式 由于硬币可以无限次使用所以 在循环过程中采用正循环(如果硬币只能使用一次 ,那么倒序循环) class Solution { public int change(int amount, int[] coins) { ...
leetcode 474 一和零 思路:首先分析题目,要注意到m个0,n个1,而且每个01 只能使用一次,所以联系01背包问题; 由于有m个0,n个1;所以状态空间为m*n的矩阵,dp[m][n] 代表的含义就是m个0,n个1的条件下,最多能满足的字符串个数, 还有一点要注意的,我们不能顺序的循环状态,因为会发生覆盖问题,所以循环仿方面采用倒序 class Solution { public int findMax...
Flask 工程中遇到的一些问题 jquery没反应 ;Ajax 解析; 在Flask工程中遇到的问题,首先是jquery无法使用,我就很蒙蔽 经过排查发现 #原始引入script的语句 #这个路径就是我存放JS文件的地方,但是路径没错 但就是不对 <script src="D:\project\untitled1\static\jquery-3.4.1.min.js"></script> #改正后能使用jquery <scrip...
leetcode 695 岛屿的最大面积 思路: 就是运用DFS深搜 先定义方向 然后定义dfs 递归函数,判断何时继续走,何时中止 然后在主函数循环遍历地图调用 dfs class Solution { int [][]direction = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; public int ...
leetcode 127 单词接龙 思路:BST 方向 :{a,b,c.......z} 设置一个queue ,记录当前位置 先是外层循环(queue != null) 如果 这个循环走完, 说明中间没返回, 直接返回0; 每一次循环 路径++; 然后是 弹出队列中, 然后循环 字符的每一位然后 进行 方向循环,用每一个方向修改字符 如果在wordlist中存在,就放进queue ...
leetcode 763 划分字母区间 思路: 主要思路还是利用JAVA的s.lastIndexOf(char) 用这个来从右到左寻找字符c出现的最后一个位置end, 然后循环寻找 刚才字符的下一个字符最后出现的位置 直到寻找到最长end class Solution { public List<Integer> partitionLabels(String S) { List<I...
leetcode 53 最大子序和 思路:先令max = nums[0], ans = nums[0] 开始遍历数组,如果当前的ans小于0,则 ans直接 = nums[i] 如果 ans > 0,那么ans 就可以加上当前的值 每循环一次 就判断max(max, ans)最后总能找到最后的最大值 class Solution { public int maxSubArray(int[] nums) { ...
leetcode 605 种花问题 思路:遍历数组,只有 当前位置不为1且 前一个不为1, 后一个不为1, 就可以。 不过要注意边界部分 class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { if(n == 0) return true; int num = flowerbed.length;...
leetCode 122 买卖股票的最佳时机ll 思路: 就是贪心 ,比前一天的大就卖了,就是贪 , 主要原理 a < b < c _____ c - a = b -a + c - b; class Solution { public int maxProfit(int[] prices) { int profit = 0; for (int i = 1; i < prices.le...
leetcode 121 买卖股票的最佳时机 思路: 就是遍历数组,寻找 最大值 与 最小值的最优差 由于不能以现在的低价格 以 以前的高价格卖出,所以 每当最小值更新时,最大值重置为0; class Solution { public int maxProfit(int[] prices) { int max = 0; int min = Integer.MAX_VALUE; i...
leetcode 406 根据身高重建队列 思路:高个会无视前面的低个,所以按照身高从大到小,同时K值按照从低到高排 然后遍历比较所在位置 和 K值的差 差多少 往前移多少 class Solution { public int[][] reconstructQueue(int[][] people) { int n = people.length; if(n == 0 || n == 1) ...
leetcode435 无重叠区间 思路 :主要注意到题目 每一对 都是后一个严格大于前一个,所以我们对二维数组按照a[1]进行排序 判断思路就是 intervals[i][0] > intervals[i+1][0] 说明用重叠 去掉后面的(为什么去后面的 因为贪心,去掉后一个 ,即使 再往后走能满足去掉的那个, 那么更能满足留下的前一个) class Solution { public int eraseOv...
leetcode 455 发放饼干 思路:贪心算法 就是先对胃口从小到大排序 再对饼干从小到大排序 遍历小饼干, 同时跟当前小朋友胃口比较,满足,num++, 下一个小朋友 class Solution { public int findContentChildren(int[] g, int[] s) { Arrays.sort(g); Arrays.sort(s); ...
leetcode 最长数对链 思路: 利用动态规划,用dp[i] 存储第i个位置最能达到的最长链个数, 然后利用双重循环,每到一个位置,从后往前遍历寻找 但是,要注意的一点,在进行动态规划时一定要先将二维数组的第一个值按照从小到大排序才行 class Solution { public int findLongestChain(int[][] pairs) { int n = pairs.len...
leetcode 279 完全平方数 思路: 跟leetcode 343 分割整数最大积 的思路一样,利用动态规划,存储每个 i 值完全平方数 的最小个数, 然后再利用双重循环,dp[a]=Math.min(dp[a],dp[a-b*b]+1); 这样去寻找最小个数,为啥是b*b,因这样就等于 dp[i - b*b]的最小个数 + 1即可,这样可以节省时间 class Solution { public...
leetcode 343整数拆分 思路:面对整数拆分,来求最大积,首先第一想法是 双重循环寻找,两个子数的最大积 但是,注意本题要求,要求是 不只两个数,所以这个方法肯定不行, 但是我们可以修改以上思路,那就是利用动态规划,dp[i]存储的就是数字 i 最大子数之积,然后再利用双重循环,但是不再是判断最大两个子数之积,而是判断两个子数的最大积的最大积(这样判断,就可以把这个数分成不止两个,从而得到的是最大的),(注意有的数本身...