
算法学习
记录自己学习到的有启发的算法
秋山澪与折木奉太郎的爱
这个作者很懒,什么都没留下…
展开
-
监控二叉树
每一个监控器可以监控,它的子节点和父节点,如何使用最少的监控器来监控整个数呢?对于这个问题只需要设置三种状态,来应对不同的情况就可以了。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solut原创 2020-10-22 14:30:33 · 152 阅读 · 0 评论 -
青蛙跳完台阶又去过河了
类似的,每一次可以选择上一次的距离K的K-1、K、K+1,的距离进行前进。直到到达终点1.回溯求解(内存超出)class Solution { private List<List<Integer>> ans = new ArrayList<>(); private List<Integer> temp = new ArrayList<>(); public boolean canCross(int[] stones) {原创 2020-09-20 15:22:12 · 136 阅读 · 0 评论 -
剪绳子(贪心)
class Solution { public int cuttingRope(int n) { if(n == 2) { return 1; } if(n == 3){ return 2; } int mod = (int)1e9 + 7; long res = 1; while(n > 4) { res *=原创 2020-09-22 09:45:46 · 116 阅读 · 0 评论 -
21点(动态规划)
对于每次从一个数字范围获取一个数到达21点的情况class Solution { public double new21Game(int N, int K, int W) { // 先判断 K - 1 + W 是否在 N 的里面,如果在的话,说明肯定能赢得游戏,返回 1.0,也就是 100% if (N - K + 1 >= W) { return 1.0; } double[] dp = new dou原创 2020-09-19 11:14:53 · 393 阅读 · 0 评论 -
相隔一个数求最大和(动态规划)
1.相隔一个数最大和class Solution { public int massage(int[] nums) { int n = nums.length; if(n == 0) return 0; if(n == 1) return nums[0]; int[] dp = new int[n]; dp[0] = nums[0]; dp[1] = Math.max(dp[0], nums[1]);原创 2020-09-19 11:14:19 · 437 阅读 · 0 评论 -
一个数组中是否存在和为一个指定值,递归回溯解决
求取一个数组中所有的数字组合(和为目标数字)1.对于一个数组类似:[1,2,3,4,7],寻找可以重复使用每一个数字,组成的集合为目标数7的组合集合。如:[[1,1,1,1,1,1,1],[2,2,2,1],[3,4],[3,3,1],…]]使用回溯进行解决,需要注意,原数组数字不可重复。class Solution{ private List<List<Integer>> ans = new ArrayList<>(); private List原创 2020-09-10 10:24:23 · 294 阅读 · 0 评论 -
求一个数组的排列组合结果(递归剪枝)
递归剪枝求解给定一个数组求它的数字组合问题1.给出集合[1,2,3,4],它的大小为2(就是k)子集有[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]。public class Solution{ private List<Integer> temp = new ArrayList<>(); private List<List<Integer>> ens = new ArrayList<>(); public L原创 2020-09-08 21:39:26 · 332 阅读 · 0 评论 -
两个二叉树的合并
将给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-two-binary-trees...原创 2020-04-22 15:36:10 · 883 阅读 · 0 评论 -
镜像二叉树(递归)
1.对一个二叉树,获取它的镜像,使用简单的递归就可以实现。# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = None...原创 2020-04-20 21:17:02 · 176 阅读 · 0 评论 -
二维数组排序
对于二维数组的Python排序在面试之中,被问到了。我居然没有做出来,觉得有一点生气。暴力解法自然不用多说,按照x,y依次排个序就好了。这里我要使用的方法是,利用权重进行排序。首先,我们分别将数组的x,y分别放入两个列表,这个时候他们是一一对应关系。接下来,我们需要对y的数组进行处理,首先获取到y数组中最大的值max_n+1,接着让这个值与y数组中每一个数对应的x数组中的数相乘,再加上y中的...原创 2020-04-20 07:17:16 · 266 阅读 · 0 评论