自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 【LLETCCODE】32.最长有效括号

题目给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。思路判断有效的字符长度,很容易想到使用栈结构。如果是“(”:则将左括号的下标推入栈中;如果是“)”:如果栈为空,证明此时右括号是非法的,将右括号的下标推入栈中,作为下一个有效括号的起点前一个坐标;如果栈不为空,即有效括号的长度为栈弹出最上层栈中内容后,maxLen=Math.max(maxLen,i-stack.peek()).代码class Solution { public int longe

2020-07-04 10:26:48 2239

原创 【LEETCODE】718.最长重复子数组-动态规划+滑动窗口

题目给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。思路设数组A长度为n,B长度为m动态规划:设置动态规划数组dp[n+1][m+1],dp[n][m]=0。从A[n-1]和B[m-1]开始向前遍历比较,可以得出伪代码:if A[i]==B[j]: dp[i][j]=dp[i+1][j+1]+1;else if A[i]!=B[j]: dp[i][j]=0;滑动窗口:滑动窗口的示意图如下图所示:代码...

2020-07-01 18:37:56 219

原创 【LEECODE】215.数组中的第K个最大元素

题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。思路找第k个最大元素很容易想到排序算法。该题可以使用堆排序进行排序,然后删除k-1个节点,即可以得到第k个最大元素。具体的实现思路见代码注释。代码class Solution { public int findKthLargest(int[] nums, int k) { int heapSize=nums.length; bui

2020-06-29 10:12:27 7062

原创 【LEETCODE】209.长度最小的子数组

题目给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。思路找到最小的连续子数组,最少需要遍历一次数组。且连续子数组可以通过两个指针进行指示。因此想到使用双指针法来完成本题。代码class Solution { public int minSubArrayLen(int s, int[] nums) { //O(n)双指针 int n=nums.le

2020-06-28 09:26:14 81

原创 【LLETCODE】124.二叉树中的最大路径和

题目给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。思路先考虑一个7个节点的完全二叉树。想要遍历所有可能的路径,可以采用后序遍历的方法由上至下遍历。因为需要找到最大路径和,在遍历一个节点时,需要找到路径和最大的分支,对应的思路为:1.路径和应当pathVal>=0,当路径和小于0时,就以该节点为路径的起始点。2.如果该点的左右分支均大于0,此时应当返回左、右分支中较大的一支与该节点值的和。

2020-06-21 10:09:37 126

原创 【LEETCODE】125.验证回文串

题目给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。分析使用双指针的方法遍历整个字符串,判断字符串是否是回文字符串。几个要点:1.Character.isLetterOrDigit()用来判断当前字符是否是字母和数字字符。2.Character.toLowerCase()将大写字母转化为小写字母,再进行比较。代码class Solution { public boolean isPalindrome(String s) { int le

2020-06-19 09:12:35 61

原创 【LEETCODE】二叉树的序列化和反序列化

题目序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。思路使用递归实现二叉树前序遍历和反序列化。代码/** * Definition for a binary tree node. * publ

2020-06-16 11:11:41 148

原创 【LEETCODE】739.每日温度

题目根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。思路思路一(暴力解法):在每一个时间节点i向后找

2020-06-11 09:50:49 85

原创 【LEETCODE】9.回文数

题目判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。思路题目要求不能使用字符串解决,很自然的想到将数字分成前半部分和后半部分。将后半部分反转后与前半部分进行比较,如果两者一直则是回文数。这对于int类型而言是很容易实现的,因为后半部分可以通过x%10得到最后一位的值,前半部分则可以通过x/10去掉最后一位值。退出循环的条件是:后半部分的值>前半部分的值。特殊情况:int为负数时,一定不是回文数;int的最后一位是0时,一定不是回文数。通过上述思

2020-06-10 10:00:04 74

原创 【LEETCODE】46.把数字翻译成字符串

题目给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。思路使用动态规划。判断第i个字符时,需要判断str.substring(i-1,i+1)对应的数字是否有对应的字母。如果有,则当前的翻译方法dp[i]=dp[i-2]+dp[i-1];如果没有,则当前的翻译方法dp[i]=dp[i-1]。代码class Solutio

2020-06-09 16:50:26 79

原创 【LEETCODE】990.等式方程的可满足性

题目给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:"a==b" 或 "a!=b"。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。思路将等式两端的字母建立为并查集,然后检查不等式中是否有并查集中的连通分量。代码class Solution { public boolean equationsPo

2020-06-08 16:55:25 89

原创 【LEETCODE】128.最长连续序列

题目给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。思路一次遍历无法找到整个连续序列最长的子序列。如果使用暴力解法需要O(n^2),不满足题目要求。因此考虑使用哈希表解决问题。1.遍历一次数组,将数组中所有数据入哈希表;2.找到序列最长的子序列:因为要求时间复杂度最小,因此需要避免一个子序列中的多个元素被重复判断多次。解决这个问题的方法是:每次判断前,确定当前数据num没有前驱,即不存在numSet.constains(num-1)。这样可以保证每一个子

2020-06-06 09:43:15 86

原创 【LEETCODE】238.除自身以外数组的乘积

题目给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。请不要使用除法,且在 O(n) 时间复杂度内完成此题。思路由于不能使用除法,且要在O(n)时间复杂度内完成题目。因此将每一个数组位置对应的乘积值转化为output[i]=i左侧的所有数乘积*i右侧的所有数乘积。计算左侧的乘积,可以让数组从前向后循环,即可完成;但是一次循环无法同时完成左侧和右侧的统计,因此需要从后

2020-06-04 09:32:37 83

原创 Java数组实现起泡排序/归并排序/二分查找/斐波那契查找/Fibonacci查找

二分查找时间复杂度:O(logn)算法的思路是:1.区间为左闭右开[lo,hi)2. 每次while循环只进行一次大小判断e<nums[mid],使代码每次判断的时间常量更小。public static int binSearch(int[] nums, int lo, int hi, int e){ while(lo<hi){ int mid = (lo+hi)>>1; if(e<nums[mid])

2020-06-02 22:41:31 146

原创 【LEETCODE】面试题64. 求1+2+…+n

题目求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。思路不使用乘除法计算1+2+…+n,自然地想到要使用循环完成代码。又由于不能使用题目上述关键字和判断语句,于是可以想到使用递归代替循环操作。代码class Solution { public int sumNums(int n) { boolean flag=n>0&&(n+=sumNums(n-1))<

2020-06-02 09:25:17 123 1

原创 【LEETCODE】101. 对称二叉树

题目给定一个二叉树,检查它是否是镜像对称的。思路采用递归的思路,进行迭代完成。代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean

2020-05-31 10:55:40 74

原创 【LEETCODE】198.打家劫舍

题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。思路打家劫舍的问题首先要想到动态规划。定义数组dp[n].在数组第i(i>1)位,有两种可以选择的情况:打劫该位,则此位置dp[i]=dp[i-2]+nums[i];不打劫该位,则dp[i]=d

2020-05-29 09:09:35 226

原创 【LEETCODE】974. 和可被 K 整除的子数组

题目给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续、非空)子数组的数目。思路涉及连续子数组的问题,考虑使用前缀和解决问题。即存储A[0]至当前数组项的和sum。本题中,(A[j]-A[i])%K==0时,表示该区间为符合条件的子数组,即A[j]和A[i]有相同的余数。=>根据上述分析将该题转化为:查找当前数组所有前缀和余数相同的项目。代码class Solution { public int subarraysDivByK(int[] A, int K) {

2020-05-27 09:54:43 159

原创 【LEETCODE】105. 从前序与中序遍历序列构造二叉树

题目根据一棵树的前序遍历与中序遍历构造二叉树。思路递归思路参考官方视频讲解代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { private Map<I

2020-05-22 11:50:38 109

原创 【LEETCODE】5. 最长回文子串

题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。思路使用中心扩展算法。字符串每个字符为起点,有两种可能的回文子串。第一是以i为中心,第二是以(i,i+1)为中心。所以将每个字符的两种情况为中心,向外扩展,直到到达边界或者字符不是回文子串为止。代码class Solution { public String longestPalindrome(String s) { int len = s.length(); i

2020-05-21 11:14:03 82

原创 【LEETCODE】1371. 每个元音包含偶数次的最长子字符串

题目给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 ‘a’,‘e’,‘i’,‘o’,‘u’ ,在子字符串中都恰好出现了偶数次。思路如何标识元音所在位置?(1) 前缀和:使用A[i][k]记录元音所在位置,其中i为元音在字符串中的位置,k为元音的标识(即a,e,i,o,u分别对应k=0,1,2,3,4)。(2)状态压缩:根据题目要求,不需要知道元音的具体数目,所以可以将前缀和的思路进行简化——使用二进制位运算标识元音的奇偶数。例如在第i个位置(a,e,i,o,

2020-05-20 16:29:56 166

原创 【LEETCODE】680.验证回文字符串Ⅱ

题目给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。思路验证是否是回文字符,至少需要O(n)的时间复杂度。因为至多删除一个字符,因此在删除一个字符之后,进行判断剩下的字符是否能构成回文字符串即可。代码class Solution { public boolean validPalindrome(String s) { int len = s.length(); //最少时间复杂度:O(n) int lo = 0;

2020-05-19 12:13:36 114

原创 【LEETCODE】152.乘积最大子数组

题目给定一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。思路使用动态规划方法。最朴素的想法,需要将每一种子数组都考虑到,即时间复杂度为O(n^2)。如何降低时间复杂度呢?最理想化的算法也需要遍历一次数组,即O(n)。求相邻数组的最大值,在第i个位置只有两种取值的可能性:(1)取nums[i]值;(2)nums[i-1]时的最大值与nums[i]相乘,即maxNum[i-1]*nums[i];此题还有一个特殊情况,就是数

2020-05-18 17:04:50 187

原创 MYSQL安装常见问题:缺少dll/服务器无法启动/系统错误5/端口占用

1. mysql下载缺少vcruntime140_1.dll解决方法:将vcruntime140_1.dll加入到C:\Windows\System32中。下载地址:https://cn.dll-files.com/vcruntime140_1.dll.html2. MySQL 服务无法启动。输入net start mysql显示:MySQL 服务无法启动。服务没有报告任何错误。请...

2020-04-27 11:55:49 1095

原创 【LEETCODE】199. 二叉树的右视图

题目给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。思路使用深度优先算法,找到每一层节点最右端的节点,加入到队列中。代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...

2020-04-22 09:45:56 77

原创 JAVA基础(二)String/StringBuffer/StringBuilder/成员变量和局部变量/对象实体和对象引用

1. JAVA面向对象编程三大特征封装:将一个对象的属性私有化。提供一些可以被外界访问的属性方法,如果属性不想被外界访问,可以不被提供方法给外界访问。继承:使用已存在类的定义作为基础建立新类的技术,新类必须继承父类,可以增加新的功能和数据。(1) 子类拥有父类对象所有的属性和方法,父类中的私有属性和方法子类无法访问,只是拥有;(2) 子类可以拥有自己的属性和方法;(3) 子类可以用自...

2020-04-21 22:56:31 606

原创 【LEETCODE】200. 岛屿数量

题目给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。思路可以使用使用深度优先遍历和广度优先遍历。TIPS:网格类的题目基本都可以考虑使用广度优先遍历进行解决。代码以广度优先遍历为例进行代码的演示。class Soluti...

2020-04-20 10:13:30 75

原创 【LEETCODE】11. 盛最多的水

题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。[图片载自:https://leetcode-cn.com/problems/container...

2020-04-18 09:57:59 80

原创 JAVA基础(一)面向对象/JAVA基本特点/重载和重写

1. 面向过程和面向对象的区别1.1 面向过程:优点:性能高。相比于类调用需要实例化,开销比较大。适用于单片机、嵌入式开发、Linux/Unix。NOTICE:嵌入式开发:****​ 嵌入式开发是指利用分立元件或集成器件进行电路设计、结构设计,再进行软件编程(通常是高级语言),实验,经过多轮修改设计、制作,最终完成整个系统的开发。这种嵌入式开发,适用于未来产品比较单一,产量比较大...

2020-04-17 23:04:17 280

原创 【LEETCODE】55.跳跃游戏

题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。思路使用贪心算法:从数组最后一个开始遍历,找到最靠前的可以遍历到的位置。如果lastPos==0证明可以从第一个位置到达最后一个位置。代码class Solution { public boolean canJump(int[] nums)...

2020-04-17 10:18:52 106

原创 Mongoose快速入门【一】:MongoDB数据库的下载和安装

MongoDB下载下载地址:https://www.mongodb.com/使用手册:https://docs.mongodb.org/manual/MongoDB安装Setup Type选择Custom,其他的都选择默认设置即可,安装在默认地址。将地址C:\Program Files\MongoDB\Server\4.2\bin加到系统的环境变量之中。[4.2是下载的版本号]在c...

2020-04-16 11:47:26 463

原创 【LEETCODE】56.合并区间

题目给出一个区间的集合,请合并所有重叠的区间。思路将数组按照起始区间排序:Arrays.sort(intervals,(o1, o2)->o1[0]-o2[0]);while循环找到重叠的区间,使用list进行存储。代码class Solution { public int[][] merge(int[][] intervals) { //将集合起始的...

2020-04-16 10:49:07 97

原创 【LEETCODE】542.矩阵

题目给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。思路矩阵找最近距离的题目,首先考虑广度优先遍历算法。最短距离是从0点开始逐层向外扩散,所以以所有值为0的节点为第一层逐渐向外遍历。一些tips:(1) 矩阵的规格为dp[n][m]时,dp[i][j]的位置可以用一个int表示:int sum = i*m+j。(2) 广度优先遍...

2020-04-15 10:45:00 378

原创 【LEETCODE】445.两数相加II

题目给你两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。思路需要逆序处理时,首先靠考虑使用栈来解决。将所有的链表数据压入栈中,然后再依次取出进行计算。代码/** * Definition for singly-linked list. * publ...

2020-04-14 18:34:06 70

原创 GOOGLE面试经典题目——鸡蛋掉落/动态规划+二分查找

【LEETCODE】887.鸡蛋掉落[2020/4/11]题目思路难点动态规划+二分查找代码题目K=鸡蛋数量;N=楼层高度;X=从X层扔下;F=鸡蛋破碎的临界值;求知道F的min移动次数思路难点不能直接用二分法——因为有鸡蛋的数量限制;在特殊情况下,二分法也不一定是最好的方法。example:K=2, N=100 , F=49​ => 从50层开始二分,如果...

2020-04-11 16:13:10 377

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除