
leetcode
lxxxxxt
这个作者很懒,什么都没留下…
展开
-
数组中只出现一次的数
一个只出现一次的数,其他出现两次全部的数异或,最后的数就是要找的数class Solution { public int singleNumber(int[] nums) { int res = nums[0]; for(int i=1;i<nums.length; i++){ res ^= nums[i]; } return res; }}两个只出现一次的数,其他出现两次假设原创 2020-09-18 22:08:38 · 123 阅读 · 0 评论 -
剑指offer+leetcode需要复习的题
剑指offer4根据前序中序序列重建二叉树(分治,递归)重建二叉树17判断是否是树的子结构(递归)判断是否是树的子结构19顺时针打印矩阵(边界)顺时针打印矩阵21是否是栈的弹出序列先把栈添加成,序列的第一个元素在栈顶的状态,然后弹出,匹配就弹出,不匹配就继续压栈。最后看空不空。是否是栈的弹出序列22从上往下打印二叉树(队列)2从上往下打印二叉树23判断数组是否是二叉搜索树的后序遍历序列(与4类似)找到左右子树分界线,左边的小于根节点,右原创 2020-09-17 12:23:56 · 153 阅读 · 0 评论 -
每天一个小知识
今天也是被自己菜哭的一天while(j<popped.length && stack.peek() == popped[j] && !stack.isEmpty() ){ stack.pop(); j++;}while里的顺序,必须要先判断j和stack的条件,才能执行stack.peek() == poped[j],否则会报EmptyStackException。while(j<popped.length && !s原创 2020-09-15 21:42:59 · 188 阅读 · 0 评论 -
0-1背包问题(动态规划)
0-1背包问题描述:有一个容量为 N 的背包,要用这个背包装下物品的价值最大,这些物品有两个属性:体积 w 和价值 v,共有M个物品。解:定义一个二维数组 dp 存储最大价值,其中 dp[i][j] 表示前 i 件物品体积不超过 j 的情况下能达到的最大价值。那么结果为dp[M][N]就是原问题的解。设第 i 件物品体积为 w,价值为 v,根据第 i 件物品是否添加到背包中,可以分两种情况讨论:第 i 件物品没添加到背包,总体积不超过 j 的前 i 件物品的最大价值就是总体积不超过 j 的前原创 2020-09-03 22:27:46 · 261 阅读 · 0 评论 -
leetcode — 123 最多两次交易的股票买卖
题目详解【转载】五种实现+详细图解 123.买卖股票的最佳时机 III代码 public int maxProfit4(int[] prices) { if(prices==null || prices.length==0) { return 0; } int n = prices.length; //定义三维数组,第i天、交易了多少次、当前的买卖状态 int[][][] dp = new i转载 2020-09-02 18:56:36 · 731 阅读 · 0 评论 -
leetcode — 714 买卖股票的最佳时机含手续费
题目纪念第一个秒写的dp哈哈哈哈哈哈哈哈,哦除了斐波那契。详解dp[i][0] 表示第i天,且手里有股票,的最大利润。dp[i][1]表示第i天,且手里没有股票,的最大利润。dp[i][0]:第i天手里有股票,可能是今天买的(那么i-1天就没有股票dp[i-1][1],第i天花了股票的价格和手续费),也可能是今天之前买的(那么i-1天就有股票dp[i-1][0])。所以dp[i][0] = max(dp[i-1][1] - prices[i] - fee, dp[i-1][0])。原创 2020-09-02 14:39:39 · 125 阅读 · 0 评论 -
leetcode — 121 买卖股票最佳时机
题目题解代码 public static int maxProfit2(int[] prices) { int n = prices.length; if(prices == null || n == 0) return 0; int[] dp = new int[n]; dp[0] = 0; for(int i=1;i<n;i++) { dp[i] = Math.max(dp[i-1], prices[i] - min(prices, i));原创 2020-09-01 22:50:54 · 135 阅读 · 0 评论 -
leetcode — 309 需要冷冻期的股票交易
题目详解【转载】 最佳买卖股票时机含冷冻期原创 2020-09-01 19:05:22 · 119 阅读 · 0 评论 -
leetcode — 1143 最长公共子序列(动态规划)
题目详解转载 2020-09-01 16:26:22 · 121 阅读 · 0 评论 -
leetcode动态规划题目录
leetcode — 198/213 打家劫舍I II(动态规划入门)leetcode —64 矩阵的最小路径和(动态规划)leetcode — 413 等差数列划分(动态规划)62 矩阵总路径数 (比较简单)303 数组区间和原创 2020-08-31 18:54:33 · 188 阅读 · 0 评论 -
leetcode — 413 等差数列划分(动态规划)
题目详解用小范围例子找规律dp[i] 表示A[0-i]中有多少等差数列发现如果A[i]-A[i-1] = A[i-1]A[i-2],则增量比上一次的增量大1。不相等则增量=0。代码package leetcode.dp;import java.util.Scanner;/* * 413: 等差数列划分 */public class NumberOfArithmeticSlices { public static void main(String[] args) {原创 2020-08-31 17:06:47 · 176 阅读 · 0 评论 -
leetcode —64 矩阵的最小路径和(动态规划)
题目:题解最优化问题,考虑动态规划。划分子问题:dp[i][j]表示走到(i,j)时的最小路径和。用子问题表示原问题:则dp[m-1][n-1]为原问题的解。将子问题用其他子问题表示:因为只能向下或向右走,则(i,j)可以由左边(i,j-1)或上边(i-1,j)移动到,dp[i][j] = min(dp[i][j-1],dp[i-1][j]) + g[i][j],所以只需要考虑左边和上边边界。当(i,j)是左上角时,i=0, j=0,则dp[i][j] = g[i][j]。当(i,j)在原创 2020-08-30 16:51:02 · 392 阅读 · 0 评论 -
leetcode — 213 打家劫舍I II(动态规划入门)
题目一:详解:图解动态规划的解题四步骤代码package leetcode.dp;public class Rob { public int rob(int[] nums) { int a = 0, b = 0; //a在前, b在后, 初始为nums[0]左边 for(int i=0;i<nums.length;i++) { int cur = Math.max(a+nums[i], b); a = b; b = cur; } re转载 2020-08-30 15:26:26 · 190 阅读 · 0 评论 -
Leetcode 题解 - 贪心思想
文章目录1. 分配饼干2. 不重叠的区间个数3. 投飞镖刺破气球4. 根据身高和序号重组队列5. 买卖股票最大的收益6. 买卖股票的最大收益 II7. 种植花朵8. 判断是否为子序列9. 修改一个数成为非递减数组10. 子数组最大的和11. 分隔字符串使同种字符出现在一起保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。1. 分配饼干455. Assign Cookies (Easy)Leetcode / 力扣Input: grid[1,3], size[1,2,4]Output: 2转载 2020-08-24 17:26:02 · 230 阅读 · 0 评论 -
leetcode —— 7 整数反转
题目思路①利用余数,第一个余数放到最高位,取下一个余数放到次高位。②用字符串reverse(),转回整数时try catch捕获整数溢出。代码//一 public static int reverse1(int n) { long result = 0; while(n != 0) { result = result*10 + n%10; n = n/10; } return (int)result == result ? (int)result : 0原创 2020-08-24 17:45:50 · 106 阅读 · 0 评论 -
leetcode —— 455 分配饼干
题目(贪心入门)思路:给一个孩子的饼干在能满足他的基础上,应该尽量小,这样大的饼干才能拿来给胃口大的孩子。因为胃口小的孩子最容易满足,所以先满足胃口小的孩子。在每一次分配时选择一种当前最优解,使最后的结果是全局最优解代码public class FindContentChildren { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.has原创 2020-08-24 17:40:47 · 138 阅读 · 0 评论 -
Leetcode 题解 - 动态规划
文章目录斐波那契数列1. 爬楼梯2. 强盗抢劫3. 强盗在环形街区抢劫4. 信件错排5. 母牛生产矩阵路径1. 矩阵的最小路径和2. 矩阵的总路径数数组区间1. 数组区间和2. 数组中等差递增子区间的个数分割整数1. 分割整数的最大乘积2. 按平方数来分割整数3. 分割整数构成字母字符串最长递增子序列1. 最长递增子序列2. 一组整数对能够构成的最长链3. 最长摆动子序列最长公共子序列1. 最长公共子序列0-1 背包1. 划分数组为和相等的两部分2. 改变一组数的正负号使得它们的和为一给定数3. 01 字符转载 2020-08-23 21:57:38 · 1131 阅读 · 0 评论 -
Leetcode 题解 - 双指针
1. 有序数组的 Two Sum2. 两数平方和3. 反转字符串中的元音字符4. 回文字符串5. 归并两个有序数组6. 判断链表是否存在环7. 最长子序列双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。1. 有序数组的 Two Sum167. Two Sum II - Input array is sorted (Easy)Leetcode / 力扣Input: numbers={2, 7, 11, 15}, target=9Output: index1=1..转载 2020-08-23 21:42:46 · 283 阅读 · 0 评论 -
Leetcode —— 1 两数之和
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。题解class Solution { public int[] twoSum(int[] nums, int target) { if(nums == nu...原创 2020-04-02 13:32:27 · 82 阅读 · 0 评论