自定义博客皮肤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)
  • 收藏
  • 关注

原创 乘积最大子数组

题目:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。思路:动态规划dp[i][1]为以nums[i]为结尾的最大乘积。本题与最大子序和不同点在于负负得正,若nums[i]>0最大值乘nums[i]变最大值最小值乘nums[i]变最小值若nums[i]<0则相反注意:若nums[i]>0,而最大值小于零,则最大值变为nums[i],其他同理。class Solution { public

2020-05-18 20:44:26 175

原创 非常易懂的全排列

题目:给定一个 没有重复 数字的序列,返回其所有可能的全排列。输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]来源:力扣(LeetCode)这种分叉选择的题用回溯是非常好的数据结构: visited数组、nums数组、List<List、List思路: dfs,因为使用dfs可以全局保护...

2020-04-25 11:32:25 179

原创 包 你 理 解 的KMP算法

开头:之前已经看过好几遍 KMP 了,但每次一想就又忘了,可恶!!!所以今天我就写一个 炒 鸡 详 细 的 KMP 的思路过程,这我要再能忘真就白痴了。废话不多说,开始我的表演:...

2020-04-14 23:05:27 121

原创 Rotate matrix(翻转矩阵)

题目:Given an image represented by an N x N matrix, where each pixel in the image is 4 bytes, write a method to rotate the image by 90 degrees. Can you do this in place?来源:力扣(LeetCode)法一:新建一个矩阵,利用(i...

2020-04-07 12:14:11 679

原创 编辑距离 Edit Distance(difficult)(Dynamic Programming)

Problem:Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.You have the following 3 operations permitted on a word:Insert a characterDelete a...

2020-04-06 11:11:09 101

原创 单词的压缩编码(中等)字典树/前缀树/Trie数

题目:给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。例如,如果这个列表是 [“time”, “me”, “bell”],我们就可以将其表示为 S = “time#bell#” 和 indexes = [0, 2, 5]。对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 “#” 结束,来恢复我们之前的单词列表。那么成功对给定单词列表进...

2020-03-30 13:49:08 203

原创 约瑟夫环

题目:0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。来源:力扣(LeetCode)思路:么当我们删除一个数字,就将整个数组中的所有数字向前挪动m位,这样我们每次删除一个数字时...

2020-03-30 13:42:23 121

原创 最长上升子序列(动态规划+二分查找)巧妙的思路

题目:给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?来源:力扣(L...

2020-03-14 14:55:36 913

原创 Best Time to Buy and Sell Stock(买卖股票的最佳时机)

题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。来源:力扣(LeetCode)思路:假设存在一个数列(不考虑空或一个元素的情况)a,b,c,d,e,f我们用一个i指针从下标1开始,每次i运动的过程中,我们计算的就是以下标i为结束(即在第i...

2020-03-09 12:24:36 142

原创 Count of Range Sum(区间和的个数)(困难)分治、归并

题目:给定一个整数数组 nums,返回区间和在 [lower, upper] 之间的个数,包含 lower 和 upper。区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。说明:最直观的算法复杂度是 O(n2) ,请在此基础上优化你的算法。示例:输入: nums = [-2,5,-1], lower = -2, upper ...

2020-02-28 12:13:30 341

原创 Count of Smaller Numbers After Self(计算右侧小于当前元素的个数)(困难)归并,分治

题目:给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。来源:力扣(LeetCode)利用归并排序的思想。每当右侧元素放入临时数组时,tmp。而当左侧元素放入临时数组时,在相应的counter位置处加上tmp。为了保证元素的顺序,我们用一个索引数组来进行归...

2020-02-25 14:07:21 135

原创 Burst Balloons(戳气球)(困难)(回溯)(动态规划)

题目:有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。每当你戳破一个气球 i 时,你可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气...

2020-02-24 15:07:34 532

原创 天际线问题(困难)专题解决思路

题目:城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。现在,假设您获得了城市风光照片(图A)上显示的所有建筑物的位置和高度,请编写一个程序以输出由这些建筑物形成的天际线(图B)。每个建筑物的几何信息用三元组 [Li,Ri,Hi] 表示,其中 Li 和 Ri 分别是第 i 座建筑物左右边缘的 x 坐标,Hi 是其高度。可以保证 0 ≤ Li, Ri ≤ INT_MAX, 0 ...

2020-02-19 19:55:48 2273

原创 寻找两个有序数组的中位数(更新一种解决方案)

题目见https://blog.csdn.net/qq_35684046/article/details/104330155法一:我们用两个指针i,j,分别指向n1与n2遍历(len1+len2+1)/2次后跳出循环。pre = now;(1)如果i<n1.lenth&&(j>=n2.lenth||n1[i]>n2[i]),令now = n1[i++]。...

2020-02-18 10:40:49 309

原创 合并K个排序链表

题目:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6来源:力扣(LeetCode)法一:排序法二:与归并排序的merge过程相似,依次选取每一个链表的最小值中的最小值直至链...

2020-02-18 09:43:26 144

原创 寻找两个有序数组的中位数(困难)非常酷的解决方案!

题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 ...

2020-02-15 17:23:48 186

原创 面试题36. 二叉搜索树与双向链表(分治)(递归)

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head...

2020-02-14 12:58:36 516

原创 最接近原点的 K 个点(分治)(递归)(快排)

题目:我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。(这里,平面上两点之间的距离是欧几里德距离。)你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。来源:力扣(LeetCode)法一:排序O(nlogn)法二:利用快排的思想解决问题想法十分简单,每一次partition比较归位元素的位置j与K-1大小:(1)...

2020-02-14 10:36:46 309

原创 为运算表达式设计优先级

题目:给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。输入: “23-45”输出: [-34, -14, -10, -10, 10]解释:(2*(3-(45))) = -34((23)-(45)) = -14((2(3-4))5) = -10(2((3-4)5)) = -...

2020-02-12 20:48:40 209

原创 搜索二维矩阵 II

题目:编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。法一:暴力法 O(nm)法二:每行或每列二分搜索O(nlogm)法三:我们从左下角出发,matrix[i][j] (i,j初始分别为行数-1,以及0),如果大于target则i–,否则j++直到找到target或将...

2020-02-12 19:56:19 112

原创 数组中的第K个最大元素

题目:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。法一:排序后输出。法二:优先队列(堆)。法三:利用快速排序的方法。在这里仅介绍法三,法一法二调用库函数即可。思路:首先,找第k个最大的元素,即是找第n-k+1个最小的元素。步骤一:我们利用快排的思想,每一次对一个元素进行归位,判断该元素最终位置p与n-...

2020-02-12 10:34:40 225

原创 特殊的二进制(困难)(递归)

题目:特殊的二进制序列是具有以下两个性质的二进制序列:0 的数量与 1 的数量相等。二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量。给定一个特殊的二进制序列 S,以字符串形式表示。定义一个操作 为首先选择 S 的两个连续且非空的特殊的子串,然后将它们交换。(两个子串为连续的当且仅当第一个子串的最后一个字符恰好为第二个子串的第一个字符的前一个字符。)在任意次数的操作之后,交换...

2020-02-11 09:14:52 324

原创 原子的数目 递归(困难)

题目:给定一个化学式formula(作为字符串),返回每种原子的数量。原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字。如果数量大于 1,原子后会跟着数字表示原子的数量。如果数量等于 1 则不会跟数字。例如,H2O 和 H2O2 是可行的,但 H1O2 这个表达是不可行的。两个化学式连在一起是新的化学式。例如 H2O2He3Mg4 也是化学式。一个括号中的化学式和数...

2020-02-09 09:55:53 218

原创 所有可能的满二叉树(感悟递归)

满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。返回包含 N 个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。答案中每个树的每个结点都必须有 node.val=0。你可以按任何顺序返回树的最终列表。示例:输入:7输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0...

2020-02-06 19:07:56 205

原创 有效的井字游戏

用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中,玩家有可能将字符放置成游戏板所显示的状态时,才返回 true。该游戏板是一个 3 x 3 数组,由字符 " ",“X” 和 “O” 组成。字符 " " 代表一个空位。以下是井字游戏的规则:玩家轮流将字符放入空位(" ")中。第一个玩家总是放字符 “X”,且第二个玩家总是放字符 “O”。“X” 和 “O” 只允许放置在...

2020-02-06 10:43:11 408

原创 第K个语法符号(递归)

题目:在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)例子:输入: N = 1, K = 1输出: 0输入: N = 2, K = 1输出: 0输入: N = 2, K = 2输出: 1输入: N = 4, K = 5输出: 1解释:第一行: 0第二行: 01第三行...

2020-02-05 12:50:16 777

原创 划分为K个相同的子集(递归)

题目:给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。示例 1:输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4输出: True说明: 有可能将其分成 4 个子集(5),(1,4),(2,3),(2,3)等于总和。注:题目搬运自LeetCode初始判断:由题目我们可知数组 nums 的总和为 s...

2020-02-05 09:29:10 482

原创 最大子序和 动态规划法(新手向)

题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。我们先定义一个函数F(N)表示nums数组以第N个元素为尾部的最大子序和,那么答案一定在F(1),F(2),F(3)…F(N)中,令F(1)为nums[0], 则有:F(N) = F(N-1) +nums[N];(当F(N-1)>0时)F(N) = nums[N];(当F(N-...

2020-01-30 09:58:19 179

原创 最长公共子数组(与子串同理)

最长公共子串首先注意子串和子序列的区别:一个字符串 s 被称作另一个字符串 S 的子串,表示 s 在 S 中出现了;一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。(定义引用LeetCode 1143)举例:1、s1: qwerdf, s2: qtwtetr (qwer为最长公共子序列)2、...

2020-01-29 08:41:34 886

原创 负数取余

如果a与d是整数,d非零,那么余数r满足这样的关系:a = qd + r , q 为整数,且0 ≤ |r| < |d|。Java 以及 C++ 使商足够大,而其他新新型语言则相反,如:7 % (-3) = 1; (Java,C++,商为-2)7 % (-3) = 2; (其他,商为-3)-7 % 3 = -1;(Java,C++,商为-2)-7 % 3 = 2;(其他,商为-3...

2020-01-26 16:25:58 293 1

原创 类似快速排序法求解三色砾石排序问题

题 目:设有顺序放置的n个桶,每个桶中装有一粒砾石,每粒砾石的颜色是红、白、蓝之一。要求重新安排这些砾石,使得所有红色砾石在前,所有白色砾石居中,所有蓝色砾石居后。重新安排时,对每粒砾石的颜色只能查看一次,并且只允许交换操作来调整砾石的位置。想法:1、用三个指针 i, j, k 分别表示红色砂砾,白色砂砾的后项下标,以及当前处理的砂砾的下标。1,2,3分别表示红白蓝砂砾。2、初值,给i =...

2019-12-25 17:25:10 3426 1

原创 用优先队列的分支限界法求解最短路径

思路辅助数据结构:(1)优先队列(2)path[i] 数组,记录到索引为 i 的节点的已知最短路径的前一个节点(3)distTo[i] 数组,记录到索引为 i 的节点的已知最短距离1、首先将起点加入优先队列,随后将其所有子节点加入优先队列,更新三个辅助数据结构。2、从优先队列中选路径最短的边的节点,依次访问其子节点,若根节点到该节点(假设该节点索引为 i )的距离小于 disTo[i]...

2019-11-29 15:13:21 2908

原创 Java 可视化第三小结(处理2D图形)

Java 可视化第三小结绘制 2D 图形需要 Graphics2D 类对象,这个类是 Graphics 类的子类,所以只要在paintComponent 方法里将进行一次 类型转换 即刻。代码如下:class DrawComponent extends JComponent{ public DrawComponent(Graphics g) { Graphics2D g2 = (G...

2019-10-22 20:12:11 180

原创 Java可视化第二小节(组件的添加)

首先定义一个 JComponent 子类,并覆盖其中paintComponent方法。该方法仅有一个 graphics 类型的参数。模板如下:class MyComponent extends Jcomponent{ public void paintComponent(Graphics g) { code for drawing }}调用时格式 g.drawSting(t...

2019-10-20 12:50:01 154

原创 Java 可视化第一小结(框架的建立,大小,标题以及位置等属性)

Java 可视化第一小结框架的类是 JFrame,先定义一个 JFrame 的子类,然后在其中修改框架的属性,比如位置,大小,等等。写好之后,便在主函数里生成相应的类。具体操作见如下代码 public static void main(String[] args) { EventQueue.invokeLater(() -> //启动 swing 程序 { Simple...

2019-10-20 12:36:45 337

空空如也

空空如也

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

TA关注的人

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