- 博客(84)
- 资源 (1)
- 收藏
- 关注
原创 leetcode 518 零钱兑换2
分析题目:硬币是可以无限次使用,题目要求是得组成硬币的组合方式个数,所以dp[n]状态表示的是 当目标值是 n 的时候,所能组成的组合方式由于硬币可以无限次使用所以 在循环过程中采用正循环(如果硬币只能使用一次 ,那么倒序循环)class Solution { public int change(int amount, int[] coins) { ...
2020-04-08 17:17:35
204
原创 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...
2020-04-07 11:31:47
191
1
原创 Flask 工程中遇到的一些问题 jquery没反应 ;Ajax 解析;
在Flask工程中遇到的问题,首先是jquery无法使用,我就很蒙蔽经过排查发现#原始引入script的语句#这个路径就是我存放JS文件的地方,但是路径没错 但就是不对<script src="D:\project\untitled1\static\jquery-3.4.1.min.js"></script>#改正后能使用jquery<scrip...
2020-03-28 14:37:42
842
原创 leetcode 695 岛屿的最大面积
思路: 就是运用DFS深搜 先定义方向 然后定义dfs 递归函数,判断何时继续走,何时中止 然后在主函数循环遍历地图调用 dfsclass Solution { int [][]direction = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; public int ...
2020-03-05 21:08:07
127
原创 leetcode 127 单词接龙
思路:BST方向 :{a,b,c.......z}设置一个queue ,记录当前位置先是外层循环(queue != null) 如果 这个循环走完, 说明中间没返回, 直接返回0;每一次循环 路径++;然后是 弹出队列中, 然后循环 字符的每一位然后 进行 方向循环,用每一个方向修改字符 如果在wordlist中存在,就放进queue...
2020-03-03 22:38:53
127
原创 leetcode 763 划分字母区间
思路:主要思路还是利用JAVA的s.lastIndexOf(char) 用这个来从右到左寻找字符c出现的最后一个位置end,然后循环寻找 刚才字符的下一个字符最后出现的位置直到寻找到最长endclass Solution { public List<Integer> partitionLabels(String S) { List<I...
2020-03-01 21:17:37
154
原创 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) { ...
2020-03-01 20:35:35
115
原创 leetcode 605 种花问题
思路:遍历数组,只有 当前位置不为1且 前一个不为1, 后一个不为1, 就可以。不过要注意边界部分class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { if(n == 0) return true; int num = flowerbed.length;...
2020-03-01 19:23:04
152
原创 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...
2020-02-29 22:48:06
108
原创 leetcode 121 买卖股票的最佳时机
思路: 就是遍历数组,寻找 最大值 与 最小值的最优差由于不能以现在的低价格 以 以前的高价格卖出,所以 每当最小值更新时,最大值重置为0;class Solution { public int maxProfit(int[] prices) { int max = 0; int min = Integer.MAX_VALUE; i...
2020-02-29 22:08:52
98
原创 leetcode 406 根据身高重建队列
思路:高个会无视前面的低个,所以按照身高从大到小,同时K值按照从低到高排然后遍历比较所在位置 和 K值的差 差多少 往前移多少class Solution { public int[][] reconstructQueue(int[][] people) { int n = people.length; if(n == 0 || n == 1) ...
2020-02-29 21:45:02
112
原创 leetcode435 无重叠区间
思路 :主要注意到题目 每一对 都是后一个严格大于前一个,所以我们对二维数组按照a[1]进行排序判断思路就是 intervals[i][0] > intervals[i+1][0] 说明用重叠 去掉后面的(为什么去后面的 因为贪心,去掉后一个 ,即使 再往后走能满足去掉的那个, 那么更能满足留下的前一个)class Solution { public int eraseOv...
2020-02-28 17:59:59
102
原创 leetcode 455 发放饼干
思路:贪心算法就是先对胃口从小到大排序再对饼干从小到大排序遍历小饼干, 同时跟当前小朋友胃口比较,满足,num++, 下一个小朋友class Solution { public int findContentChildren(int[] g, int[] s) { Arrays.sort(g); Arrays.sort(s); ...
2020-02-28 17:08:21
149
原创 leetcode 最长数对链
思路: 利用动态规划,用dp[i] 存储第i个位置最能达到的最长链个数,然后利用双重循环,每到一个位置,从后往前遍历寻找但是,要注意的一点,在进行动态规划时一定要先将二维数组的第一个值按照从小到大排序才行class Solution { public int findLongestChain(int[][] pairs) { int n = pairs.len...
2020-02-27 22:18:09
137
原创 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...
2020-02-25 16:47:44
119
原创 leetcode 343整数拆分
思路:面对整数拆分,来求最大积,首先第一想法是 双重循环寻找,两个子数的最大积但是,注意本题要求,要求是 不只两个数,所以这个方法肯定不行,但是我们可以修改以上思路,那就是利用动态规划,dp[i]存储的就是数字 i 最大子数之积,然后再利用双重循环,但是不再是判断最大两个子数之积,而是判断两个子数的最大积的最大积(这样判断,就可以把这个数分成不止两个,从而得到的是最大的),(注意有的数本身...
2020-02-25 15:57:50
129
原创 leetcode 303 区域和检索 - 数组不可变
思路:利用动态规划,将dp[i]代表的是从 0 加到 i 的和submerge(i, j)= dp [j] - dp[i -1]; //当i != 0的情况下,因为要加上nums[i] ,所以减去的是dp[i - 1];当i== 0; 直接返回 dp[i]class NumArray { int dp[]= new int[10000]; public Nu...
2020-02-24 13:06:18
108
原创 leetcode 62不同路径
思路: 就是利用动态规划,每一给dp[][]存储的是到达该点的路径总数,具体思路我写在了代码里因为方向只能向左向下,所以二重循环遍历二维数组是合理的class Solution { public int uniquePaths(int m, int n) { //思路: int [][]dp = new int[m][n];//dp当然存的是到该...
2020-02-24 12:38:50
85
原创 leetcode 64 最小路径
思路: 利用动态规划的思路;在二维矩阵中,只能向右, 向下 :分别对应 横坐标 ++; 纵坐标 ++; 每一个dp[i][j]代表的是到达该点的最小距离到达任意一点的最小路径= Math.min(从上方往下走, 从左边往右走) } //当然这是在该位置上方有路, 左边有路的情况下所以我在程序中,这一步的判断我分成两步, 因为有可能其中一条路没有,无法比较class Sol...
2020-02-24 12:28:11
79
原创 leetcode 213 打家劫舍ll
思路:与原本的打家劫舍单排类似,对于环形的房子,我们采取的策略是 分成两列统计一下1。有头无尾 2。有尾无头然后两个作比较。class Solution { public int rob(int[] nums) { int dp[] = new int[nums.length + 1]; int dp2[] = new int[nums.le...
2020-02-23 16:57:51
79
原创 leetcode 198 打家劫舍
思路:利用动态规划,dp[n] 数组存储的是强盗到每个房子的能抢到的最大值,为了统一方便dp[0]代表刚开始还没房子值为0,dp[1]当然就是第一个房子的值,dp[2] = MAX(第二间房子值 + dp[0] 隔开前一个的位置, dp[1]),所以我们能得到动态方程dp[n] = MAX(第n间房子值 + dp[n - 2], dp[n -1])这里需要注意的是我们要设置 dp[0]...
2020-02-23 16:11:17
82
原创 leetcode 70 爬楼梯
思路:第一种思路就是利用递归,从上往下走,但是会超时所以不用这种方法第二种思路就是动态规划 ,关键步骤是 dp[n] = dp[n-1] + dp[n -2];用一个数组存储到每一层的方法个数,而每层可以用前一阶走一步到这儿,前两阶走两步到这儿,所以dp[n] = dp[n-1] + dp[n -2];地class Solution { public int climbS...
2020-02-23 11:35:08
69
原创 leetcode 128 最长连续序列
思路:先将所有数放进HashMap中,然后就,遍历Hashmap,挨个判断连续最大值class Solution { public int longestConsecutive(int[] nums) { int max = 0; Map<Integer, Integer>map = new HashMap<>(); ...
2020-02-22 00:04:47
147
原创 leetcode 594 最长和谐子序列
思路: 就是利用HashMap的containsKey()函数;遍历HashMap,遍历过程中,比较出最大 (max , 当前的value + key加减1的value)class Solution { public int findLHS(int[] nums) { Map<Integer ,Integer> map = new HashMap<...
2020-02-21 22:02:50
172
原创 leetcode 1 两数之和
思路:因为是两个数之后,并且具有数 与 其在数组里的对应关系 , 所以我们想到利用HashMap存储,数与位置,(由于数组中有可能存在两个相同的数,并且也有可能答案就是这两个数之和,),为了避免这种情况,我们采用边判断是否containsKey(target - nums[i]),边往hashmap里放数值,一定要先判断再放值。class Solution { public i...
2020-02-21 21:31:17
110
原创 leetcode 75颜色分类
思路:采取快排排序,反正就3个数class Solution { public void sortColors(int[] nums) { //桶排序 QuickSort(nums, 0, nums.length - 1); } public void QuickSort(int []nums, int i , int j) ...
2020-02-21 18:44:55
83
原创 leetcode 451 根据字符出现频率排序
思路: 先把String 转成 CharArray ,然后遍历字符数组将根据频度放入到HashMap中,然后遍历hashMap放到PriorityQueue(大根堆(就是重写compare函数))然后一个字符一个字符的弹出来,组建新的字符串class Solution { public String frequencySort(String s) { char[] A...
2020-02-21 17:29:01
86
原创 leetode 347 前k个高频元素
思路:因为有时间复杂度限制一 :利用堆排序(nlogn),这里采用java 自带的PriorityQueue队列 (默认是小根堆,所以要重写compartor里的compare()函数,将其改成大根堆,实际上是比较 hashmap频度的大根堆)。总体流程: 先把 num(key) 以及其频度(value) 放入 HashMap中,再将key遍历放入PriorityQueue 中,然后往外取k ...
2020-02-18 17:48:14
299
原创 leetcode 215 数组中的第k个 最大元素
思路: 选择用快速排序,简单说一下快速排序,首先来说,快排一趟的流程是先选出一个标准值P(一般选用数组第一个),首先从后往前寻找一个小于P的值,记住此下标(代码中位high),并把这个元素值赋给前半部分的low下标的元素值,然后再从前往后寻找一个大于P的值,记录此下标low,把这个大于P的值,赋给刚刚的high下标,一直循环直到(low > = high )为止,整体的快排,先对整个,再...
2020-02-18 12:18:41
105
原创 leetcode 231 2的幂
思路:就是判断2进制的1的个数大于1个就不是2.利用 n&(-n) 得到低位1,判断与原n是否相同public boolean isPowerOfTwo(int n) { return n > 0 && (n & (n - 1)) == 0;}public boolean isPowerOfTwo(int n) { return...
2020-02-17 15:57:32
72
原创 leetcode 190 颠倒二进制位
思路:以循环的方式,不断的把最后一位前进相应的位数,再进行相加public class Solution { // you need treat n as an unsigned value public int reverseBits(int n) { int ans = 0; int item = n; for (int i...
2020-02-17 15:42:46
91
原创 leetcode 268 缺失数字
思路:还是利用本身与本身异或为0;本身与0异或为本身由于是1,2,3,,,n存在数组里,刚好与下标+1构成相同对,只有缺失的数字构不成两个,所以异或后得到的结果就是答案class Solution { public int missingNumber(int[] nums) { int z = 0; int num = 1; for...
2020-02-17 11:37:12
109
原创 leetcode 136 只出现一次的数字
思路:由于重复的数字只会出现两次所以,根据两个相同的数进行异或=0,与0异或是本身的原理,循环异或即可得到答案class Solution { public int singleNumber(int[] nums) {//思路:异或排除相同两次 与0异或s还是本身 int z = 0; for(int n : nums) { ...
2020-02-17 11:19:47
77
原创 leetcode 461 汉明距离
思路: 汉明距离,首先将两个数异或^运算,然后再进行统计运算后得到的1的个数两种方法统计1的个数:1. 利用Integer.bitCount()来计算2.将得到的值循环向后移一位,并判断最后一位是否为1class Solution { public int hammingDistance(int x, int y) { // return Integer.bi...
2020-02-17 11:13:06
71
原创 leetcode 503 下一个更大元素ll
思路:就是双循环寻找下一个最大值,不过运行效率极低class Solution { public int[] nextGreaterElements(int[] nums) { int n = nums.length; int []next = new int[n]; Arrays.fill(next,-1); for(...
2020-02-16 11:57:16
158
原创 leetcode 20 有效的括号
思路:每次添加新的字符时,判断当前字符与栈顶字符是否匹配(匹配原则 ()两个字符ASCII相差1,{} [] 两个字符ASCII相差2)匹配则弹出栈顶,不匹配把当前的字符压入,最后判断栈空不空,空就匹配上了class Solution { public boolean isValid(String s) { Stack<Character> st = ...
2020-02-16 10:55:15
119
原创 leetcode 155 最小栈
思路: 利用两个栈,保持两个栈元素个数相等,对应位置的元素,一个时压进来的元素,一个是属于这个位置的最小元素class MinStack { Stack<Integer> st = new Stack<>(); Stack<Integer> min = new Stack<>(); /** initialize your...
2020-02-16 10:36:04
83
原创 leetcode 225 用队列实现栈
思路:利用队列实现栈,只有每次添加时,改变添加方式,向队头class MyStack { Queue<Integer> list = new LinkedList<>(); /** Initialize your data structure here. */ public MyStack() { } ...
2020-02-16 10:22:15
86
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人