自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

152. 乘积最大子数组给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。方法:动态规划法// 动态规划// 遍历数组时计算当前最大值,不断更新// 令imax为当前最大值,则当前最大值为 imax = max(imax * nums[i], nums[i])// 由于存在负数,那么会导致最大的变最小的,最小的变最大的。因此还需要维护当前最小值imin,imin = min(imin * nums[i], nums[i]

2020-08-09 00:44:09 256

原创 docker安装elasticsearch+安装 Kibana

博文参考:https://www.cnblogs.com/leizzige/p/12264981.html下载镜像docker pull kibana:7.2.0或docker pull nshou/elasticsearch-kibana创建kibana容器docker run -d -p 9200:9200 -p 5601:5601 nshou/elasticsearch-kibana或安装完成以后需要启动kibana容器,使用ELASTICSEARCH_URL连接到ela

2020-08-06 20:36:39 525

原创 docker容器中elasticsearch配置跨域访问(elasticsearch-head插件访问不到es集群)

docker命令进入elasticsearch对应的容器 docker exec -it [容器名] /bin/bash安装vim编辑器更改配置文件,需要使用到vim,已安装可以忽略apt-get updateapt-get install vim进入到/config/elasticsearch.yml配置文件,添加以下配置代码:http.cors.enabled: truehttp.cors.allow-origin: "*"重启容器,配置完成docker res.

2020-08-06 18:42:06 2345

原创 docker安装elasticsearch2.4.3(单机版)+ elasticsearch-head插件

下载镜像docker pull elasticsearch:2.4.4启动容器docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 elasticsearch:2.4.4测试curl http://localhost:9200

2020-08-06 16:59:38 150

原创 【LeetCode-435】435. 无重叠区间 (区间调度问题)

区间调度问题参考解决一个很经典的贪心算法问题 Interval Scheduling(区间调度问题)。给你很多形如 [start, end] 的闭区间,请你设计一个算法,算出这些区间中最多有几个互不相交的区间。int intervalSchedule(int[][] intvs) {}举个例子,intvs = [[1,3], [2,4], [3,6]],这些区间最多有 2 个区间互不相交,即 [[1,3], [3,6]],你的算法应该返回 2。注意边界相同并不算相交。这个问题在生活中的应用广泛,比

2020-07-30 00:05:29 717

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

128. 最长连续序列给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。方法一:哈希表/*复杂度分析:时间复杂度:O(n),其中 n 为数组的长度。具体分析已在上面正文中给出。空间复杂度:O(n)。哈希表存储数组中所有的数需要 O(n) 的空间。*/class Solution { public int longestConsecutive(int[] nums) { int n = nums.length;

2020-06-28 15:40:33 215

原创 【LeetCode-733】733.图像渲染

733.图像渲染题目描述有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。

2020-06-21 23:29:45 230

原创 【LeetCode-11】11. 盛最多水的容器

11. 盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。双指针法时间复杂度:O(n)实现思路:一开始两个指针一个指向开头一个指向结尾,此时容器的底是最大的,接下来随着指针向内移动,会造成容器的底变小,在这种情况下想要让容器盛水变多,就只有

2020-06-12 22:27:29 162

原创 【LeetCode-239】239. 滑动窗口最大值

239. 滑动窗口最大值给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?方法一:单调队列class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums == null || nums.length == 0) {

2020-06-12 14:59:31 152

原创 【LeetCode-78】78.子集(回溯+直接法+二进制排序)

78.子集给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。方法一:递归开始假设输出子集为空,每一步都向子集添加新的整数,并生成新的子集。class Solution { // 从前往后遍历, 遇到一个数, 之前的所有集合添加上这个数组成新的子集 public List<List<Integer>> subsets(int[] nums) { List<List<Inte

2020-06-12 00:39:58 154

原创 【LeetCode-31】31.下一个排列

31. 下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。解题思路:线性扫描讲解1同类型题目,思路相同class Solution { public void nextPermutation(int[] nums) { int len = nums.length; // base case

2020-06-12 00:38:36 113

原创 【LeetCode】739. 每日温度(单调栈)

每日温度题目描述请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。解题思路:单调栈(最优)一

2020-06-12 00:22:10 164

原创 【LeetCode-556】556. 下一个更大元素 III

556. 下一个更大元素 III题目描述给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。类似于求:LeetCode31题——下一个排列参考思路:线性扫描,时间复杂度O(n)算法思想:把 n 转为为字符数组 arr ,然后从后往前看,找到第一个下降的位置 i,然后让再从后往前找到第一个比 i 位置的值大的数,交换这两个位置,再逆序i后面的所有字符。举例理解:n: 12544321n: 12|5443

2020-06-12 00:00:24 188

原创 【LeetCode-503】503.下一个更大元素II

503.下一个更大元素II题目描述给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。最优思路:单调栈思路:将数组中所有元素全部置为 -1遍历两次,相当于循环遍历第一遍遍历,入栈索引: i只要后面元素比栈顶索引对应的元素大,索引出栈,更改result[stack.pop()]的数值最后栈里面剩余的

2020-06-11 22:24:47 224

原创 【LeetCode-496】496. 下一个更大元素 I

496. 下一个更大元素 I题目描述给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。最优思路:单调栈+哈希通过Stack、HashMap解决先遍历大数组nums2,首先将第一个元素入栈;继续遍历,当当前元素小于栈顶元素时,继续将它

2020-06-11 22:09:12 155

原创 【LeetCode-297】297. 二叉树的序列化与反序列化

297. 二叉树的序列化与反序列化序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。说明: 不要使用类的成员 / 全局 / 静态变量来存储状态,你的序列化和反序列化算法应该是无状态的。先序遍历思想(较

2020-06-10 16:15:43 156

原创 【LeetCode-43】43.字符串相乘

43.字符串相乘给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。思路参考base case:注意乘积为0的情况class Solution { public String multiply(String num1, String num2) { if(num1.equals("0") || num2.equals("0")) { return "0"; }

2020-06-05 01:20:03 118

原创 【LeetCode-687】687. 最长同值路径

687. 最长同值路径给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。注意:两个节点之间的路径长度由它们之间的边数表示。后序遍历思想视频学习参考/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int

2020-06-04 23:48:27 149

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

124.二叉树中的最大路径和给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。先序遍历思想推荐比较好的Up主算法讲解/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNo

2020-06-04 22:19:15 117

原创 【LeetCode-106】106. 从中序与后序遍历序列构造二叉树

106. 从中序与后序遍历序列构造二叉树根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution

2020-06-04 21:40:57 180

原创 【LeetCode-137】137.只出现一次的数字 II

137. 只出现一次的数字 II给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?方法一:hashmap计数class Solution { public int singleNumber(int[] nums) { HashMap<Integer, Integer> hashmap = new HashMap<>();

2020-06-04 16:45:57 90

原创 【LeetCode-645】645.错误的集合

645.错误的集合集合 S 包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。给定一个数组 nums 代表了集合 S 发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。思路分析这个问题的特点是,每个元素和数组索引有一定的对应关系。我们现在自己改造下问题,暂且将 nums 中的元素变为 [0…N-1],这样每个元素就和一个数组索引完全对应了,这样方便理

2020-06-04 14:52:35 195

原创 【LeetCode-42】42. 接雨水

42. 接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。方法一:暴力法/*方法一:暴力法时间复杂度 O(N^2),空间复杂度 O(1)。但是很明显这种计算 r_max 和 l_max 的方式非常笨拙,一般的优化方法就是备忘录。*/class Solution { //考虑局部i,位置 i 能达到的水柱高度和其左边的最高柱子、右边的最高柱子有关,我们分别称这两个柱子高度为 max_left 和 max_right,位置 i 最大的

2020-06-04 13:47:49 147

原创 【LeetCode-面试题】面试题 17.04. 消失的数字

面试题 17.04. 消失的数字数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?注意:本题相对书上原题稍作改动异或运算利用异或的特性,res = res ^ x ^ x。对同一个值异或两次,那么结果等于它本身// 如何找这个落单的数字呢,只要把所有的元素和索引做异或运算,// 成对儿的数字都会消为 0,只有这个落单的元素会剩下,也就达到了我们的目的。class Solution { public int missing

2020-06-04 03:08:19 417

原创 【LeetCode-678】678. 有效的括号字符串

678. 有效的括号字符串给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应的左括号 ( 。左括号 ( 必须在对应的右括号之前 )。可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。一个空字符串也被视为有效字符串。方法一:dfs方法二:贪心方法三:双向遍历方法四:双栈参考思路/*方法四:双栈括号匹配问题的经典解法栈存放的是索引

2020-06-04 02:57:23 165

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

238.除自身以外数组的乘积给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。思路:乘积 = 当前数左边的乘积 * 当前数右边的乘积方法一时间复杂度:O(n)空间复杂度:O(n)class Solution { public int[] productExceptSelf(int[] nums) { int n = nums.length;

2020-06-04 02:29:54 99

原创 【LeetCode-25】25.K个一组翻转链表

25. K 个一组翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。参考思路学习/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x;

2020-06-04 01:38:56 100

原创 【LeetCode-45】45. 跳跃游戏 II

45. 跳跃游戏 II给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。思路一:从左往右贪心法// 时间复杂度 O(N),空间复杂度 O(1)// 贪心法class Solution { public int jump(int[] nums) { // i 和 end 标记了可以选择的跳跃步数 // farthest 标记了所有选择 [i..end]

2020-06-04 01:13:06 118

原创 【LeetCode-55】55.跳跃游戏

55.跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。贪心法参考思路class Solution { public boolean canJump(int[] nums) { int n = nums.length; if(n <= 1) { return true; } // 设定当前可以到达的最大坐

2020-06-04 00:40:44 105

原创 【LeetCode-153】153.寻找旋转排序数组中的最小值

153.寻找旋转排序数组中的最小值假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。二分搜索class Solution { public int findMin(int[] nums) { if(nums == null || nums.length == 0) { return -1;

2020-06-03 19:44:21 134

原创 【LeetCode-81】81.搜索旋转排序数组 II

搜索旋转排序数组 II假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。改进二分搜索注意重复数字、所有边界的处理/*//每次二分,左半部分和右半部分至少有一边是有序的,以此为条件可以分成两种情况://1、左半边是有序的//(1) target落在左半边//(2) otherwise//2、右半边是

2020-06-03 17:45:41 90

原创 【LeetCode-33】33. 搜索旋转排序数组

搜索旋转排序数组修改的二分查找思路参考class Solution { public int search(int[] nums, int target) { if(nums == null || nums.length == 0) { return -1; } int n = nums.length; if(n == 1) { return nums[0] == target ?

2020-06-03 17:22:39 179

原创 【LeetCode-1011】1011.在 D 天内送达包裹的能力

在 D 天内送达包裹的能力传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。二分查找左边界思路参考class Solution { // 寻找左侧边界的二分查找 public int shipWithinDays(int[] weights, int

2020-06-03 16:18:18 195

原创 【LeetCode-50】50. Pow(x, n)

50. Pow(x, n)实现 pow(x, n) ,即计算 x 的 n 次幂函数。思路:快速幂 + 迭代class Solution { public double myPow(double x, int n) { double res = 1.0; long i = n > 0 ? n : -n; while(i != 0) { //n的二进制表示的最后一位数不为0 -> (n & 1) !=

2020-06-03 11:48:07 85 1

原创 【LeetCode-875】875. 爱吃香蕉的珂珂

875. 爱吃香蕉的珂珂搜索左侧边界的二分查找思路参考/*时间复杂度分析:getHours需要扫描整个数组,每执行一次需要O(n)的时间。函数getHours执行的次数等于minEatingSpeed中while循环执行的次数。由于应用了二分查找算法,while循环执行的次数为O(logMAX),max为最多一堆香蕉的数目。因此总的时间复杂度是O(nlogMAX)。*/class Solution { public int minEatingSpeed(int[] piles, i

2020-06-02 22:48:22 186

原创 【LeetCode-372】372.超级次方

超级次方你的任务是计算 a^b 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。处理数组指数+快速幂思路快速幂注意:大数乘法可能用到快速幂,可以将int类型换成long long 类型,防止数据溢出class Solution { int mod = 1337; public int superPow(int n,int[] nums){ LinkedList<Integer> list = new LinkedLi

2020-06-02 22:19:45 243

原创 【LeetCode-】204. 计数质数

204. 计数质数统计所有小于非负整数 n 的质数的数量。优化后的时间复杂度O(N * loglogN)思路参考class Solution { //O(N * loglogN) public int countPrimes(int n) { boolean[] isPrim = new boolean[n]; // 将数组都初始化为 true Arrays.fill(isPrim, true); /

2020-06-02 21:20:03 95

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

5. 最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。解题思路1:双指针扩展中心法思路参考/* 寻找回文串的问题核心思想是:从中间开始向两边扩散来判断回文串。*/class Solution { public String longestPalindrome(String s) { //空间复杂度O(1) String res = ""; if(s == null ||

2020-06-02 21:02:05 89

原创 【LeetCode-437】437.路径总和 III(从二叉树中找出路径和等于给定数值的路径总数)

路径总和 III给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。思路一:dfs解题思路/** * Definition for a binary tree node. * public class TreeNode { * int val; * T

2020-06-02 16:21:00 349

原创 【LeetCode-面试题】面试题26. 树的子结构

面试题26. 树的子结构输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。解题思路:dfs注意子结构和子树的区别子树: 整个树要与原树相同, A与B相同, A的孩子与B相同子结构: 只有有部分相同即可, 当B遍历到NULL时, 即返回true/** * Definition for a binary tree node. * public class TreeNode { * int v

2020-06-02 15:29:48 113

空空如也

空空如也

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

TA关注的人

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