Java
文章平均质量分 93
DEUSJIN
这个作者很懒,什么都没留下…
展开
-
乘积最大子数组
题目:给你一个整数数组 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 · 184 阅读 · 0 评论 -
非常易懂的全排列
题目:给定一个 没有重复 数字的序列,返回其所有可能的全排列。输入: [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 · 189 阅读 · 0 评论 -
包 你 理 解 的KMP算法
开头:之前已经看过好几遍 KMP 了,但每次一想就又忘了,可恶!!!所以今天我就写一个 炒 鸡 详 细 的 KMP 的思路过程,这我要再能忘真就白痴了。废话不多说,开始我的表演:...原创 2020-04-14 23:05:27 · 154 阅读 · 0 评论 -
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 · 720 阅读 · 0 评论 -
单词的压缩编码(中等)字典树/前缀树/Trie数
题目:给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。例如,如果这个列表是 [“time”, “me”, “bell”],我们就可以将其表示为 S = “time#bell#” 和 indexes = [0, 2, 5]。对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 “#” 结束,来恢复我们之前的单词列表。那么成功对给定单词列表进...原创 2020-03-30 13:49:08 · 235 阅读 · 0 评论 -
约瑟夫环
题目: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 · 140 阅读 · 0 评论 -
最长上升子序列(动态规划+二分查找)巧妙的思路
题目:给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [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 · 928 阅读 · 0 评论 -
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 · 205 阅读 · 0 评论 -
天际线问题(困难)专题解决思路
题目:城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。现在,假设您获得了城市风光照片(图A)上显示的所有建筑物的位置和高度,请编写一个程序以输出由这些建筑物形成的天际线(图B)。每个建筑物的几何信息用三元组 [Li,Ri,Hi] 表示,其中 Li 和 Ri 分别是第 i 座建筑物左右边缘的 x 坐标,Hi 是其高度。可以保证 0 ≤ Li, Ri ≤ INT_MAX, 0 ...原创 2020-02-19 19:55:48 · 2287 阅读 · 0 评论 -
寻找两个有序数组的中位数(更新一种解决方案)
题目见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 · 344 阅读 · 0 评论 -
合并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 · 156 阅读 · 0 评论 -
寻找两个有序数组的中位数(困难)非常酷的解决方案!
题目:给定两个大小为 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 · 198 阅读 · 0 评论 -
最接近原点的 K 个点(分治)(递归)(快排)
题目:我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。(这里,平面上两点之间的距离是欧几里德距离。)你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。来源:力扣(LeetCode)法一:排序O(nlogn)法二:利用快排的思想解决问题想法十分简单,每一次partition比较归位元素的位置j与K-1大小:(1)...原创 2020-02-14 10:36:46 · 318 阅读 · 0 评论 -
为运算表达式设计优先级
题目:给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。输入: “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 · 243 阅读 · 0 评论 -
搜索二维矩阵 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 · 119 阅读 · 0 评论 -
数组中的第K个最大元素
题目:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。法一:排序后输出。法二:优先队列(堆)。法三:利用快速排序的方法。在这里仅介绍法三,法一法二调用库函数即可。思路:首先,找第k个最大的元素,即是找第n-k+1个最小的元素。步骤一:我们利用快排的思想,每一次对一个元素进行归位,判断该元素最终位置p与n-...原创 2020-02-12 10:34:40 · 254 阅读 · 0 评论 -
特殊的二进制(困难)(递归)
题目:特殊的二进制序列是具有以下两个性质的二进制序列:0 的数量与 1 的数量相等。二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量。给定一个特殊的二进制序列 S,以字符串形式表示。定义一个操作 为首先选择 S 的两个连续且非空的特殊的子串,然后将它们交换。(两个子串为连续的当且仅当第一个子串的最后一个字符恰好为第二个子串的第一个字符的前一个字符。)在任意次数的操作之后,交换...原创 2020-02-11 09:14:52 · 338 阅读 · 0 评论 -
原子的数目 递归(困难)
题目:给定一个化学式formula(作为字符串),返回每种原子的数量。原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字。如果数量大于 1,原子后会跟着数字表示原子的数量。如果数量等于 1 则不会跟数字。例如,H2O 和 H2O2 是可行的,但 H1O2 这个表达是不可行的。两个化学式连在一起是新的化学式。例如 H2O2He3Mg4 也是化学式。一个括号中的化学式和数...原创 2020-02-09 09:55:53 · 232 阅读 · 0 评论 -
所有可能的满二叉树(感悟递归)
满二叉树是一类二叉树,其中每个结点恰好有 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 · 230 阅读 · 0 评论 -
有效的井字游戏
用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中,玩家有可能将字符放置成游戏板所显示的状态时,才返回 true。该游戏板是一个 3 x 3 数组,由字符 " ",“X” 和 “O” 组成。字符 " " 代表一个空位。以下是井字游戏的规则:玩家轮流将字符放入空位(" ")中。第一个玩家总是放字符 “X”,且第二个玩家总是放字符 “O”。“X” 和 “O” 只允许放置在...原创 2020-02-06 10:43:11 · 418 阅读 · 0 评论 -
第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 · 786 阅读 · 0 评论 -
划分为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 · 525 阅读 · 0 评论 -
最大子序和 动态规划法(新手向)
题目:给定一个整数数组 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 · 181 阅读 · 0 评论 -
最长公共子数组(与子串同理)
最长公共子串首先注意子串和子序列的区别:一个字符串 s 被称作另一个字符串 S 的子串,表示 s 在 S 中出现了;一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。(定义引用LeetCode 1143)举例:1、s1: qwerdf, s2: qtwtetr (qwer为最长公共子序列)2、...原创 2020-01-29 08:41:34 · 916 阅读 · 0 评论 -
负数取余
如果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 · 346 阅读 · 1 评论 -
Java 可视化第三小结(处理2D图形)
Java 可视化第三小结绘制 2D 图形需要 Graphics2D 类对象,这个类是 Graphics 类的子类,所以只要在paintComponent 方法里将进行一次 类型转换 即刻。代码如下:class DrawComponent extends JComponent{ public DrawComponent(Graphics g) { Graphics2D g2 = (G...原创 2019-10-22 20:12:11 · 211 阅读 · 0 评论 -
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 · 182 阅读 · 0 评论 -
Java 可视化第一小结(框架的建立,大小,标题以及位置等属性)
Java 可视化第一小结框架的类是 JFrame,先定义一个 JFrame 的子类,然后在其中修改框架的属性,比如位置,大小,等等。写好之后,便在主函数里生成相应的类。具体操作见如下代码 public static void main(String[] args) { EventQueue.invokeLater(() -> //启动 swing 程序 { Simple...原创 2019-10-20 12:36:45 · 344 阅读 · 0 评论