
LeetCode
NULL326
这个作者很懒,什么都没留下…
展开
-
动态规划01背包,leetcode 474. 一和零
动态规划分析,类似于0-1背包问题给定一个容量,问装一些物品最多可以装多少,对于每一个物品,只有装和不装两种状态解题思路:1、建立动态规划的表格,大小为m+1,n+12、动态规划方程:dp[m][n]=max(1+dp[m-num[0][n-num[1]),dp[m][n])意思为对于每一个字符串,只要当前剩余容量可以装下,就是其减去当前字符串占有容量的值+1,和之前计算的结果比较取较大值代码:package com.leetCode.dp;import java.util.Arrays原创 2020-10-27 10:55:48 · 166 阅读 · 0 评论 -
LeetCode1535. 找出数组游戏的赢家
首先,按题意走,被题目中的移动干扰,并没有注意大数据集代码:package com.LeetCode1.Array;public class Leet1535 { public static void main(String[] args) { int[] arr = {2,1,3,5,4,6,7}; System.out.println(getWinner(arr,2)); } public static int getWinner(int[] arr, int k) {原创 2020-10-16 19:46:19 · 198 阅读 · 0 评论 -
LeetCode:1476 子矩形查询
LeetCode:1476 子矩形查询题目很简单,考察简单构造函数与矩阵边界问题代码:class SubrectangleQueries { private static int[][] rectangle; public SubrectangleQueries(int[][] rectangle) { this.rectangle = rectangle; } public void updateSubrectangle(int row1, int col原创 2020-10-16 18:29:08 · 150 阅读 · 0 评论 -
LeetCode72:编辑距离
1、题目给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符2、思路对于两个字符串中的某一个字符,我们有两种情况(1)两个字符相等,dp[i][j]=dp[i-1][j-1](2)两个字符不相等,对原字符串进行处理:I:修改字符串指针 j:对照字符串指针dp[i][j]=Min(dp[i][j-1],dp[i-1][j],dp[i-1][j-1])+1插原创 2020-07-03 00:16:11 · 129 阅读 · 0 评论 -
LeetCode64. 最小路径和
1、典型的dp思想(记忆)2、一开始尝试使用dfs解决,最终不出意外的超时3、dp方法思路:(1)建立一个dp数组,然后从左上角开始(2)dp公式:dp[i][j]=grid[i][j]+min(dp[i-1][j],dp[i][j-1])(j=0取前面,i=0取后面)代码:package com.leetCode.dp;public class leet64_t { public static void main(String[] args) { int[][] arr = {{1,原创 2020-05-15 10:49:40 · 170 阅读 · 0 评论 -
LeetCode688:类似576
1、注意结束条件2、注意步数=0的情况代码:package com.leetCode.dp;public class leet688 { /** * 注意走0步的情况 * r和c都在原地,走1步的情况 * @param args */ public static void main(String[] args) { System.out.println(knightProbability(1,1,0,0)); } static double y=0; static d原创 2020-05-12 11:28:17 · 108 阅读 · 0 评论 -
LeetCode576. 出界的路径数-三维数组动态规划+dfs
1、对于边界个数,二维矩阵到某个位置的次数等问题,首要考虑dfs2、本题有三个变数:i,j,N三个都要用作dp变量在规定的步数内走到边界,可以用递归。但是直接递归会造成超时在递归的过程中总会走到一些之前已经走过的地方,记录每次走的地方的值,直接返回因为有步数的限制,所以数组需要使用三维数组(创新点)注意是走N+1步出界算作是结束条件,所以开辟数组的时候要开辟N+1代码:package com.leetCode.dp;public class leet576 { /** * 在规定的步原创 2020-05-12 09:30:42 · 302 阅读 · 0 评论 -
LeetCode1027. 最长等差数列
思路:(1)建立一个二维数组dp[i][j]:i是指下标,j是指到这个下标的差值,dp[i][j]是指到这个下标这个差值最长的序列长度(2)如果后面某个下标到这个下标的差值与当前的差值相同,那个下标的最大差值=这个下标的差值+1(3)此处创新点:dp[i][cha]:一个下标表示的是差值代码:package com.leetCode.dp;public class leet1027 { /** * * @param args */ public static void mai原创 2020-05-11 13:42:31 · 212 阅读 · 0 评论 -
LeetCode221. 最大正方形
思路与1227相似,求出以某个点为右下角组成的最大正方形即可修改:1、给出的数组是char类型的!!!转成int2、给出一个空数组!!!空返回0,一定注意特殊情况!!!3、最终求面积,不是边长,在最后返回之前主机平方代码:package com.leetCode.dp;public class leet221 { public static void main(String[] args) { System.out.println((int)'0'); } public int m原创 2020-05-10 23:56:58 · 118 阅读 · 0 评论 -
LeetCode1277. 统计全为 1 的正方形子矩阵
1、暴力解法:通过几个循环控制正方形大小的同时,控制走向package com.leetCode.dp;public class leet1277 { /** * 修改1:超时 * @param args */ public static void main(String[] args) { int[][] arr = {{0,1,1,1},{1,1,1,1},{0,1,1,1}}; System.out.println(countSquares(arr)); }原创 2020-05-10 23:40:36 · 196 阅读 · 0 评论 -
LeetCode523:连续子数组和
1、未考虑的情况:k=0的情况,一般涉及到%和/都要优先考虑到除数为0的情况。k=0且数组中有连续两个0的情况,返回true双层循环,复杂度(O(n^2))代码:package com.leetCode.dp;public class leet523 { /** * 修改1:k=0的情况,会出现%k除数为0的错误 * 修改2:在1的基础上k=0直接返回false是不行的,如果数组中有连续的两个0,结果应该是true * @param args */ public stati原创 2020-05-09 14:40:36 · 176 阅读 · 0 评论 -
leetcode152:乘积最大子序列
自己想的方法:双重for循环,外层控制开始的地方,内层控制从开始到数组最后不断替换最大值,最终得出结果,但是效率很低代码:package com.leetCode.dp;public class leet152 { public static void main(String[] args) { int[] arr = {0,2}; System.out.println(ma...原创 2020-05-08 15:42:25 · 100 阅读 · 0 评论 -
leetcode1024:视频拼接 贪心
1、一开始考虑不断找可以覆盖范围最大的,经过多次尝试均失败2、此类题,因为要所有数字均覆盖,所以考虑从开始位置不断向后推。每次贪心可以走到最远的位置3、注意:每次的开头不一定是当前已经已经走到的位置,而是在这位置之前的都可以代码:package com.leetCode.dp;public class leet1024_t { public static void main(Stri...原创 2020-05-08 13:47:37 · 1616 阅读 · 0 评论 -
LeetCode0107:旋转矩阵(对角变换)
1、因为不能借助额外空间,所以考虑找规律找对换元素,通过不断交换2、通过提示得出,通过对角线交换和中心线为中心交换左右即可达到目的3、注意对角线交换算法代码:package com.LeetCode1.Array;public class leet0107 { /** * 基本思想:先以对角线为中心,变换上下,然后以中心线为中心对换左右 * @param args */...原创 2020-05-07 20:42:07 · 1072 阅读 · 0 评论 -
leetcode1014:最佳观光组合
1、一开始考虑两个for循环解决,不出意料,超时2、后来想着建立一个类,标明序号值,但是还是和原来差不多变换公式A[i]+i+A[j]-j3、看题解,很简单,用两个值,一个保存A[i]+i到目前为止的最大值。一个保存A[i]+i+A[j]-j到目前的最大值4、一个for循环不断向前推进,两个最大值相加即可5、该方法用于解决一个元素与其右边元素相加的最大值代码:package com....原创 2020-05-07 12:22:06 · 195 阅读 · 0 评论 -
Java中map使用
1、Map集合和Collection集合的区别Map集合是有Key和Value的,Collection集合是只有Value。Collection集合底层也是有Key和Value,只是隐藏起来。常用方法:https://www.cnblogs.com/xiaostudy/p/9510763.html...转载 2020-05-07 08:34:55 · 133 阅读 · 0 评论 -
LeetCode90:子集II深搜回溯剪枝法
修改注意点:1、下面每次递归中变元now是代表要确定第几个位置,循环中的i代表这个位置选择哪一个元素。每次递归下去,要为i+1不是now+1.因为要从当前选择的元素开始往下选2、有重复元素会出现相同的子集解决办法:剪枝策略:先将数组进行排序,排好之后重复元素就会聚集在一起。在进行回溯的时候,循环过程中判断这个元素是否和前面一个元素相同,相同代表这个位置,此元素已经被选择过,不再选择,跳过...原创 2020-05-06 15:41:24 · 205 阅读 · 0 评论 -
LeetCode78:用回溯法求子集
回溯法最终需要有一个结束条件,而求所有子集需要子集个数从0-元素个数因此,进入条件就限制k(元素个数)注意回溯中,下面进入下一步的时候,控制指向元素指针的是i,不是now代码:package com.leetCode.code;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;...原创 2020-05-04 15:55:05 · 356 阅读 · 0 评论 -
LeetCode1011
1、考虑问题不够全面(注意在没有评测系统的时候,会出问题)在考虑的时候被测试用例带偏了,没有考虑会出现不是正好的情况。1,2,3,1,1 4在最终没有达到天数要求的情况下也可以进行,即最后分多次运输即可所以将最后改为<=代码:package com.leetCode.code;public class leet1011 { public static void main(S...原创 2020-05-04 11:27:41 · 239 阅读 · 0 评论 -
leetcode53-简单动态规划
题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。代码class Solution { public int maxSubArray(int[] nums) { i...原创 2020-01-16 18:19:14 · 190 阅读 · 0 评论 -
LeetCode27:移除元素
题目:给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个...原创 2019-09-16 00:34:44 · 90 阅读 · 0 评论 -
LeetCode26:删除排序数组中的重复项
题目:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 n...原创 2019-09-12 09:38:37 · 108 阅读 · 0 评论 -
LeetCode18:四数之和问题
问题给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:...原创 2019-09-09 22:08:17 · 126 阅读 · 0 评论 -
LeetCode16: 最接近的三数之和
问题:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与target最接近的三个数的和为 2. (-1 + 2 + 1 = 2).来源:力扣(LeetCode)链接:ht...原创 2019-09-03 22:53:41 · 87 阅读 · 0 评论 -
leetcode20:有效括号匹配
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true来源:力扣(LeetCode)链接:https://leetcode-cn...原创 2019-09-03 22:15:53 · 163 阅读 · 0 评论 -
LeetCode17:电话号码的字母组合
题目:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].解析:本题目上来一看可能会想的很简单,只是一个个遍历即可,但将图画出来,仔细一看,此事并不简单。看着这个图...原创 2019-09-01 23:00:12 · 126 阅读 · 0 评论