自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mason97的博客

欢迎访问我的个人博客:http://118.126.90.35

  • 博客(85)
  • 收藏
  • 关注

原创 【LeetCode】399. 除法求值 并查集

这道题目的解法是带权值的并查集。并查集可以看这篇文章的讲解:https://blog.csdn.net/niushuai666/article/details/6662911并查集由一个整数型的数组和两个函数构成。数组pre[]记录了每个点的前导点是什么,函数find是查找,join是合并解题思路:建立两个map,一个map存储上一级结点。一个map存储比值。首先不断构建查并集结构。如果两者根节点不一致,进行合并。然后输出最终的结果即可。public class Solution {..

2020-05-30 11:46:18 280

原创 【LeetCode】337. 打家劫舍 III

思路是:递归解题,rob(根节点)可以分成两种情况:一定有根节点,一定没有根节点。其中,一定有根节点的情况,说明一定没有根节点的两个儿子。这个方法是自上而下的,因而有许多重复的子问题。时间复杂度较高。public class Solution { public int rob(TreeNode root) { // 用递归的思路 if (root == null) return 0; int money = root.val; .

2020-05-28 15:36:01 131

原创 【LeetCode】347. 前 K 个高频元素

我的思路是建立一个Map,key存储数,value存储出现的次数。然后将获取,由entry构成的list,根据value值降序排列。然后获取前k个的key,就是结果。public class Solution { public int[] topKFrequent(int[] nums, int k) { HashMap<Integer, Integer> map = new HashMap<>(); for (int num : nums.

2020-05-28 13:44:43 120

原创 【LeetCode】739. 每日温度 (字节第四次面试的题目)(皮皮虾)

简单来说,就是找再过几天,温度超过今天。如果之后的温度都低于今天,置为0我的做法是直接按照题意来,时间效率上有点低。public class Solution { public int[] dailyTemperatures(int[] T) { // 就按照题意来吧 int[] res = new int[T.length]; for (int i = 0; i < T.length; i++) { // 遍历数.

2020-05-28 12:07:20 292

原创 【LeetCode】49. 字母异位词分组

我的思路是建立一个map,遍历字符串数组,将字符串数组转换成字符数组,排列,然后再转换成字符串。map的key是字符串。如果map的key中有这个字符串,我在value中添加这个字符串,没有的话,我创建一个新的List<String>。最后遍历map,将value整合成一个list,输出结果。public class Solution { public List<List<String>> groupAnagrams(String[] strs) { .

2020-05-28 09:40:44 140

原创 【LeetCode】287. 寻找重复数

直观的思路,创建一个HashSet,遍历数组,直到找到重复的那个数字。(违反了原题中额外空间的要求)另寻他法。class Solution { public int findDuplicate(int[] nums) { HashSet<Integer> set = new HashSet<>(); for (int num : nums) { if(set.contains(num)){ .

2020-05-26 16:05:26 101

原创 【LeetCode】647. 回文子串

我的思路是暴力遍历。遍历所有可能的子串。借助一个方法,能够判断一个字符串是不是回文的。速度很慢,需另寻他法。public class Solution { public int countSubstrings(String s) { // 用遍历的方法 int res = 0; int len = s.length(); for (int i = 1; i <= len ; i++) {// 子字符串的长度:1,2,3...

2020-05-26 15:32:32 74

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

直接使用Arrays.sort API,复杂度为nlogn还可以更快。class Solution { public int findKthLargest(int[] nums, int k) { Arrays.sort(nums); return nums[nums.length - k]; }}手写快速排序但是手写快排的速度并没有赶上直接调用库函数…public class Solution { public int findK.

2020-05-26 14:31:19 169

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

我的思路是搞两层循环,一个遍历桶的左边沿,一个遍历桶的有边沿。然后获得这些遍历的最大值。速度有点慢。public class Solution { public int maxArea(int[] height) { int len = height.length; int res = 0; for (int i = 0; i < len - 1; i++) {// 遍历左边的边沿 for (int j = i +.

2020-05-26 12:51:35 169

原创 【LeetCode】236. 二叉树的最近公共祖先

我的思路是,先创建一个方法isParent,可以判读一个结点是不是另一个结点的父结点。怎么实现找到两个结点的最近父结点呢?从根节点开始,如果它的左或右子结点是两个结点的父结点,就接着递归。直到它的左或右子结点都不是这两个结点的父结点。那么就找到了最终的结果。能够成功运行,但是速度很慢,需要另寻他法。public class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode .

2020-05-26 11:46:46 116

原创 【LeetCode】406. 根据身高重建队列

我的直观思路是搜索回溯算法,加上剪枝。也就是dfs,深度优先遍历。但是最终的结果是超出时间限制,看来需要换一种耗时少的算法。public class Solution { public int[][] reconstructQueue(int[][] people) { // 用搜索回溯的方法来解题。 int len = people.length;// 一共有len个人 int count = 0; // 排序到第count个人 .

2020-05-26 10:06:22 190

原创 【牛客网】迷宫问题

采用搜索回溯的方法。import java.util.LinkedList;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { int row = in.nextInt(); ...

2020-05-26 00:16:32 447

原创 【LeetCode】96. 不同的二叉搜索树

我的直观思路是递归。先确定根节点。左子树和右子树都是二叉搜索树。public class Solution { public int numTrees(int n) { if (n == 0) return 1; int sum = 0; for (int i = 1; i <= n; i++) {// 跟结点的序号 sum += numTrees(i - 1) * numTrees(n - i); .

2020-05-25 13:17:46 113

原创 【LeetCode】64. 最小路径和

直观的思路是递归,但是,你会发现,有很多重复的计算。最终的程序超时。public class Solution { public int minPathSum(int[][] grid) { return method(grid, 0, 0, grid.length-1, grid[0].length-1); } private int method(int[][] grid, int i, int j, int row, int column) { .

2020-05-24 11:41:20 224 1

原创 【LeetCode】208. 实现 Trie (前缀树)

我的思路是,创建一个StringBuffer,然后每增加一个word比如dog,我就向sb中append:-dog-,搜索一个单词就搜索-xxx-,搜索前缀,就搜索-xxx运行速度比较慢。class Trie { private StringBuffer sb; /** * Initialize your data structure here. */ public Trie() { sb = new StringBuffer(); .

2020-05-24 10:41:14 95

原创 【LeetCode】39. 组合总和:背包客解法、dfs解法

我直观的思路是背包客问题。这是一道变种的完全背包客问题,完全背包客问题是,用一定容量的背包去装每种数量不限的具有特定价值和特定重量的金块。但是速度上很慢。看网友的解法,换用dfs,深度优先遍历的方法,配合剪枝操作。class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { // 无限背包问题。 List<Li..

2020-05-23 15:45:17 616

原创 【LeetCode】94. 二叉树的中序遍历

递归的方法:class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new LinkedList<>(); if (root == null) return res; midOrder(res, root); return res; } private .

2020-05-23 12:24:29 110

原创 【LeetCode】338. 比特位计数:位运算相关的知识

我的解题思路有两种。第一种是利用Integer类的static int bitCount(int i) 函数。第二种是利用转台转移方程:P(x)=P(x/2)+(xmod2)class Solution { // public int[] countBits(int num) { // int[] res = new int[num + 1]; // for (int i = 0; i < num + 1; i++) { // re.

2020-05-23 11:38:25 153

原创 【LeetCode】22. 括号生成:深度优先搜索,dfs,剪枝,搜索回溯

这道题目可以使用dfs,即深度优先遍历。加上适当的剪枝。可以求解。搜索回溯。class Solution { public List<String> generateParenthesis(int n) { // 这道题目采用深度优先遍历。适当的剪枝。 List<String> res = new LinkedList<>(); if (n == 0) return res; int remain.

2020-05-23 10:59:32 192

原创 【LeetCode】46. 全排列:搜索回溯 深度优先遍历 dfs

这是一道深度优先遍历的题目。或者说搜索回溯,有状态标记,有中止条件判定。public class Solution { public List<List<Integer>> permute(int[] nums) { int len = nums.length; List<List<Integer>> res = new LinkedList<>(); if (len == 0) { .

2020-05-23 10:28:24 164

原创 【LeetCode】78. 子集

我的思路是递归,挨个遍历数组,然后将结果list中,新增一些成员list,这些成员list是在原来的基础上增加了数组遍历的元素。class Solution { public List<List<Integer>> subsets(int[] nums) { LinkedList<List<Integer>> list = new LinkedList<>(); LinkedList<Integer.

2020-05-22 22:21:10 92

原创 【LeetCode】581. 最短无序连续子数组

想法是将数组复制一下,将复制后的数组进行排序。创建两个指针,从两头对比两个数组,直到找到不相等的位置。然后就得出了结果。public class Solution { public int findUnsortedSubarray(int[] nums) { int[] copy = Arrays.copyOf(nums, nums.length); Arrays.sort(copy); int i = 0; int j = num.

2020-05-22 21:03:16 111

原创 【LeetCode】234. 回文链表

直观的思路,我创建一个stack,然后遍历链表,向stack中压栈,然后再次遍历链表,同时从stack中弹栈,如果完全吻合,就说明是回文链表。public class Solution { public boolean isPalindrome(ListNode head) { Stack<ListNode> stack = new Stack<>(); ListNode tmp = head; while (tmp != .

2020-05-22 19:24:04 86

原创 【LeetCode】198. 打家劫舍

也就是找出最大的元素和,条件是这些元素都不相邻。我的思路是,利用动态规划的方法,状态转移方程为:f(x)=max{f(x-2),f(x-3)} + money(x)f(x)的意思是,以x位置为最后一家的能抢的最多的钱。money(x)是序号为x的这一家人的钱数。public class Solution { public int rob(int[] nums) { if (nums.length == 0) return 0; if (nums.length .

2020-05-22 18:38:50 154

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

用递归的方法:public class Solution { public boolean isSymmetric(TreeNode root) { if(root==null) return true; // 用递归的方法来判断一个树是不是对称的树 return method(root.left, root.right); } // 这个方法能够判断两棵树是不是镜面对称的 public boolean method(Tr.

2020-05-22 17:07:40 90

原创 【LeetCode】538. 把二叉搜索树转换为累加树

利用了中序遍历的思路。只不过这个是从右到左的中序遍历。这样遍历的情况就是从大到小遍历。我维护一个sum值,给每个结点的值加上sum,并且维护sum这个数值。这样就得到了最终的结果。

2020-05-22 14:57:44 72

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

找到一个字符串最长的回文子串我的思路1:一个字符串,我要是知道从0到i的子串的最大回文子串(一定包含第i位)的长度。我就知道了这个字符串的最大回文子串的长度。那么怎么知道一个字符串,包含最后一位字符的最大回文子串呢?我判断从0开始的子串是不是回文的,不是的话从1开始的子串是不是回文的,知道一个子串是回文的。我还需要一个能够判断一个字符串是不是回文字符串的方法。class Solution { public String longestPalindrome(String s) { .

2020-05-21 22:09:04 92

原创 【牛客网】从单向链表中删除指定值的节点

题目不难,但是坑的是换行空格输出格式中,每一个数字后面需要有一个空格,最后一个数字也要有一个空格(真坑),然后加一个换行。

2020-05-21 18:52:21 220

原创 ClassLoader 类加载问题 双亲委派

http://blog.itpub.net/31561269/viewspace-2222522/JVM 中内置了三个重要的 ClassLoaderBootstrapClassLoaderExtensionClassLoaderAppClassLoaderBootstrapClassLoader负责加载 JVM 运行时核心类,这些类位于 JAVA_HOME/lib/rt.jar 文件中,我们常用内置库 java.xxx.* 都在里面,比如 java.util.、java.io.、jav.

2020-05-21 00:54:24 136

原创 线程池的【创建】和【种类】

https://blog.csdn.net/qq_33453910/article/details/81413285https://www.cnblogs.com/zhaoyan001/p/7049627.html类和接口的组织结构:java里面的线程池的顶级接口是ExecutorExecutor并不是一个线程池,而只是一个执行线程的工具,而真正的线程池是ExecutorService。使用工厂类Executors来创建ExecutorServiceExecutors中的几个个静.

2020-05-20 23:12:45 135

原创 http的长连接 短连接

https://www.cnblogs.com/cswuyg/p/3653263.htmlhttps://www.cnblogs.com/gotodsp/p/6366163.html长连接数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。长连接可以省去较多的TCP建立和关闭的操作,.

2020-05-20 20:08:01 119

原创 https简介

https://blog.csdn.net/qq_36908872/article/details/80602437HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取Web浏览器和网站服务器之间的传输报文,就可以直接读取其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号,密码支付信息。HTTPS在HTTP的基础上加入了SSL协议服务端需要有一对公钥和私钥。可以想象成一把钥匙和一个锁头,全世界只有你一个人有这一把钥匙,你可以把锁头给别人,别人可以用这把锁把重.

2020-05-20 17:49:28 370

原创 设计模式 之 单例模式

定义:确保一个类只有一个实例,并提供一个全局的访问点/** * 设计一个单例模式的类 */public class Demo02 { // 私有的空参构造方法 private Demo02() { } // 私有的静态成员变量 private static Demo02 uniqueInstance = new Demo02(); // 能够返回唯一的对象的方法公共静态方法 public static Demo02 getInstance(

2020-05-20 11:22:16 98

原创 【牛客网】成绩排序

我使用LinkedHashMap,但是没有考虑到名字可能重名,然后就导致,被覆盖的问题。发生错误进行了改进:存入数据时:取出数据时:import java.util.*;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { int ...

2020-05-20 10:46:01 256

原创 手写一个死锁

public class MyDeadLock { public static void main(String[] args) { String a = "a"; String b = "b"; Resources resources1 = new Resources(a, b); Resources resources2 = new Resources(b, a); new Thread(resources1).st

2020-05-19 10:54:07 165

原创 【牛客网】在字符串中找出连续最长的数字串

这道题目有个坑点,题目没有说清楚输出,当有相同最大长度的字符数字子串 怎么输出。如下图就知道了,还需要按顺序,所以不能用HashMap,要用LinkedHashMap

2020-05-18 10:03:12 257

原创 【牛客网】放苹果

是一个数学题目:应用了递归的思想。f(m,n) m为苹果数,n为盘子数。如果n>m f(m,n)=f(m,m) 因为一定有n-m个盘子是空的。如果n<=m,f(m,n)=f(m-n,n)+f(m,n-1)。分成了两种情况,每一个盘子都有苹果;至少有一个盘子没有苹果。利用这个递推公式就可以求出答案。import java.util.Scanner;public class Main { public static void main(String[] args) { .

2020-05-17 23:03:47 245

原创 【牛客网】称砝码 增强for循环中 修改元素报错

我在代码中,对HashSet进行增强for循环,并在循环中进行添加元素的操作,结果造成报错:所以学到了一个知识点。foreach的底层就是迭代器。在增强for循环中不能修改集合,否则会出现并发修改异常。除非你用迭代器去修改元素,例如可以用:iterator.remove();来删除元素。...

2020-05-17 21:04:46 235

原创 【牛客网】字符串合并处理

自己没有仔细读题目,如果是这些字符就一顿操作。意味着不是这些字符,就不操作…以后要认真读题。import java.util.Arrays;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) {

2020-05-17 11:39:26 274

原创 【牛客网】整数与IP地址间的转换

网址链接第一版答案:package May16;import java.util.*;public class Demo12 { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { String ip = in.next(); String address

2020-05-16 23:37:12 286

空空如也

空空如也

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

TA关注的人

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