自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

dev_zyx的博客

talk is cheap

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

原创 876. 链表的中间结点

题目:876. 链表的中间结点题解:解释一:解释二:解释三:1. 在两个中间结点的时候,返回第二个中间结点2. 在两个中间结点的时候,返回第一个中间结点代码:public class code876 { public static ListNode middleNode(ListNode head) { if(head == null) { return null; }

2020-06-30 23:54:40 277

原创 146. LRU缓存机制

题目:146. LRU缓存机制题解:1. 题解一:使用LinkedHashMap实现2. 题解二:使用双向链表结构+HashMap实现0. 解题思路:1. 解释一:2. 解释二:(主要思路)/* 缓存容量为 2 */LRUCache cache = new LRUCache(2);// 你可以把 cache 理解成一个队列// 假设左边是队头,右边是队尾// 最近使用的排在队头,久未使用的排在队尾// 圆括号表示键值对 (key, val)cache.p

2020-06-29 20:45:22 256

原创 139. 单词拆分

题目:139. 单词拆分题解:解释一:解释二:/* 动态规划算法,dp[i]表示s前i个字符能否拆分 转移方程:dp[j] = dp[i] && check(s[i+1, j]); check(s[i+1, j])就是判断i+1到j这一段字符是否能够拆分 其实,调整遍历顺序,这等价于s[i+1, j]是否是wordDict中的元素 这个举个例子就很容易理解。 假如wordDict=["apple", "pen", "code

2020-06-28 12:42:32 260

原创 剑指 Offer 68 - II. 二叉树的最近公共祖先

题目:剑指 Offer 68 - II. 二叉树的最近公共祖先题解:代码:该题代码无法进行测试。(LeetCode后台对 “结点相等” 已进行处理)1. 疑难点一:2. 疑难点二:public class 面试题68_2 { public static TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null) // 当越过叶节点,则直

2020-06-24 14:51:34 452

原创 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

题目:剑指 Offer 68 - I. 二叉搜索树的最近公共祖先题解:1. 题解一:迭代2. 题解二:递归代码:1. 代码一:迭代public class 面试题68_1 { // 方法1:迭代 public static TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { while(root != null) // 当节点 root 为空时跳出

2020-06-24 11:38:50 354

原创 剑指 Offer 66. 构建乘积数组

题目:剑指 Offer 66. 构建乘积数组题解:1. 题解一:左右数组解释一:解释二:2. 题解二:左(或右)数组解释一:解释二:代码:1. 代码一:左右数组public class 面试题66 { // 方法1:左右数组 public static int[] constructArr(int[] a) { if(a == null || a.length == 0) { return

2020-06-23 14:01:50 273

原创 剑指 Offer 65. 不用加减乘除做加法

题目:剑指 Offer 65. 不用加减乘除做加法题解:代码:1. 代码一:迭代public class 面试题65 { // 方法1:迭代 public static int add(int a, int b) { int sum; // 无进位和 int carry; // 进位值 while(b != 0) // 当进位为 0 时跳出 { sum = a ^ b; // 异或

2020-06-23 11:33:52 311

原创 剑指 Offer 64. 求1+2+…+n

题目:剑指 Offer 64. 求1+2+…+n题解:解释一:解释二:代码:public class 面试题64 { public int res = 0; public int sumNums(int n) { boolean x = n > 1 && sumNums(n - 1) > 0; res += n; return res; } public

2020-06-23 09:42:44 271

原创 剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫环问题)

题目:剑指 Offer 62. 圆圈中最后剩下的数字题解:约瑟夫环问题1. 题解一:模拟链表,O(n²)2. 题解二:数学解法,O(n)代码:1. 代码一:import java.util.*;public class 面试题62 { // 方法1:模拟链表 public static int lastRemaining(int n, int m) { ArrayList<Integer> list = new Array

2020-06-21 13:04:45 447

原创 剑指 Offer 61. 扑克牌中的顺子

题目:剑指 Offer 61. 扑克牌中的顺子题解:注意:大小王属于癞子牌1. 题解一:不排序方式2. 题解二:排序方式代码:1. 代码一:不排序方式import java.util.*;public class 面试题61 { // 方法1:不排序方式 public static boolean isStraight(int[] nums) { Set<Integer> set = new HashSet<>

2020-06-20 18:12:10 291

原创 剑指 Offer 60. n个骰子的点数

题目:剑指 Offer 60. n个骰子的点数题解:疑难点:代码:public class 面试题60 { public static double[] twoSum(int n) { // 状态定义,dp[i][j]表示骰子个数为i时点数j可能出现的次数,dp[i][s]表示i个骰子掷出s点的次数 int dp[][] = new int[n + 1][6 * n + 1]; // 初始状态 for(int

2020-06-20 13:33:58 286

原创 剑指 Offer 59 - I. 滑动窗口的最大值

题目:剑指 Offer 59 - I. 滑动窗口的最大值题解:代码:import java.util.*;public class 面试题59_1 { public static int[] maxSlidingWindow(int[] nums, int k) { if(nums == null || k < 1 || nums.length < k) { int temp[] = new int[0];

2020-06-19 17:29:58 452

原创 面试题58 - II. 左旋转字符串

题目:面试题58 - II. 左旋转字符串题解:1. 题解一:字符串切片2. 题解二:列表遍历拼接3. 题解三:字符串遍历拼接4. 题解四:三步翻转法(优先)算法思想:1. 第一步:先对前 n 个字符进行翻转;2. 第二步:然后对后面的部分进行翻转;3. 第三步:最后对整体进行翻转。代码:1. 代码一:字符串切片// 方法1:字符串切片public static String reverseLeftWords(String s, int n) { re

2020-06-19 11:09:33 219

原创 面试题58 - I. 翻转单词顺序

题目:面试题58 - I. 翻转单词顺序题解:1. 题解一:双指针代码:1. 代码一:双指针public class 面试题58_1 { // 方法1:双指针 public static String reverseWords(String s) { s = s.trim(); // 删除首尾空格 int j = s.length() - 1; int i = j; StringBuilder res = n

2020-06-18 18:41:25 367

原创 面试题57. 和为s的两个数字

题目:面试题57. 和为s的两个数字题解:代码:/** * 面试题57 */public class 面试题57 { public static int[] twoSum(int[] nums, int target) { int i = 0; int j = nums.length - 1; while(i < j) { int sum = nums[i] + nums[j]

2020-06-18 12:49:59 221

转载 java 中 Cannot make a static reference to the non-static 解决方法

今天敲代码的时候遇到了这个问题,大体这个问题可以简化成这样;public class Test1 { public String get() { return "123"; } public static void main(String[] args) { String string =get(); }}12345678910显示 ...

2020-06-17 22:02:34 2159

原创 面试题54. 二叉搜索树的第k大节点

题目:面试题54. 二叉搜索树的第k大节点题解:代码:/** * 面试题54 */public class 面试题54 { public int ans = 0; public int count = 0; public int kthLargest(TreeNode root, int k) { dfs(root, k); return ans; } public void dfs(TreeN

2020-06-17 21:40:15 177

原创 面试题53 - I. 在排序数组中查找数字 I

题目:面试题53 - I. 在排序数组中查找数字 I34. 在排序数组中查找元素的第一个和最后一个位置题解:34. 在排序数组中查找元素的第一个和最后一个位置1. 题解一:二分法2. 题解二:遍历法代码:1. 代码一:二分法public class 面试题53_1 { public static int search(int[] nums, int target) { int left = left_bound(nums, target); i

2020-06-16 21:01:20 200

原创 面试题52. 两个链表的第一个公共节点

题目:面试题52. 两个链表的第一个公共节点160. 相交链表题解:1. 解释一:2. 解释二:3. 解释三:代码:public class 面试题52 { public static ListNode getIntersectionNode(ListNode headA, ListNode headB) { if(headA == null || headB == null) { return null

2020-06-16 18:09:15 222

原创 面试题50. 第一个只出现一次的字符

题目:面试题50. 第一个只出现一次的字符题解:1. 题解一:哈希表代码:1. 代码一:哈希表import java.util.*;public class 面试题50 { // 方法1:哈希表 public static char firstUniqChar(String s) { HashMap<Character, Boolean> map = new HashMap<>(); char c[] =

2020-06-15 21:56:46 228

原创 面试题49. 丑数

题目:面试题49. 丑数题解:动态规划(三指针)1. 解释一:2. 解释二:3. 解释三:4. 解释四:代码:public class 面试题49 { public static int nthUglyNumber(int n) { int a = 0; int b = 0; int c = 0; int dp[] = new int[n]; // dp[i] 代表第 i + 1 个丑数

2020-06-15 17:22:30 275

原创 面试题47. 礼物的最大价值

题目:面试题47. 礼物的最大价值题解:代码:/** * 面试题47 */public class 面试题47 { public static int maxValue(int[][] grid) { int m = grid.length; // m行 int n = grid[0].length; // n列 int dp[][] = new int[m][n]; dp[0][0] = grid[0][0

2020-06-14 23:30:14 242

原创 面试题44. 数字序列中某一位的数字

题目:面试题44. 数字序列中某一位的数字400. 第N个数字题解:1. 解释一:2. 解释二:代码:public class 面试题44 { public static int findNthDigit(int n) { int digit = 1; long start = 1; long count = 9; while(n > count) // 1.

2020-06-14 18:22:33 402

原创 605. 种花问题

题目:605. 种花问题题解:防御式编程思想:在 flowerbed 数组两端各增加一个 0, 这样处理的好处在于不用考虑边界条件。我们从左到右扫描数组 flowerbed,任意位置处只要连续出现三个 0 就可以栽上一棵花。并且把中间位置的 0 修改成 1,并将计数器 count 增加 1。代码:public class code605 { public static boolean canPlaceFlowers(int[] flowerbed, int n) {

2020-06-14 13:11:16 392

原创 面试题46. 把数字翻译成字符串

题目:面试题46. 把数字翻译成字符串题解:注意:此题类似于“青蛙跳台阶”一题。代码:public class 面试题46 { public static int translateNum(int num) { String s = String.valueOf(num); int dp[] = new int[s.length() + 1]; dp[0] = 1; dp[1] = 1; for

2020-06-09 22:05:27 253

原创 面试题43. 1~n整数中1出现的次数

题目:面试题43. 1~n整数中1出现的次数233. 数字 1 的个数题解:代码:public class 面试题43 { public static int countDigitOne(int n) { int digit = 1; // 位因子(初始化为:个位) int high = n / 10; // 高位 int cur = n % 10; // 当前位 int low = 0; // 低位

2020-06-09 12:31:36 288

转载 哈希表(散列表)原理详解

参考:哈希表(散列表)原理详解十一、从头到尾解析Hash表算法什么是哈希表?哈希表(散列表)原理详解什么是哈希表?   哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。记录的存储位置=f(关键字)这里的对应关系f称为散列函数,又称为哈希(Hash函数),采用散列技术将记录存

2020-06-09 11:07:27 1086

原创 面试题36. 二叉搜索树与双向链表

题目:面试题36. 二叉搜索树与双向链表426. 将二叉搜索树转化为排序的双向链表题解:代码:Node.java// Definition for a Node.class Node { public int val; public Node left; public Node right; public Node() { } public Node(int _val) { val = _val; }

2020-06-07 13:16:37 199

原创 面试题53 - II. 0~n-1中缺失的数字

1. 数组有序:题目:面试题53 - II. 0~n-1中缺失的数字题解:1. 题解一:二分法2. 题解二:顺序扫描一趟扫描,若nums[i] != i,表示该元素值缺失,返回其下边即可;若一直到数组的最后一个元素都是nums[i] == i,表示缺失的元素正好就是nums[nums.length],因此,返回其对应的下标即可。代码:1. 代码一:二分法public class 面试题53_2 { // 方法1: public static int missin

2020-06-06 13:07:13 824

原创 从n个数中选取m个数的所有组合

题目:n个数1,2,...,n,从这n个数中任意选m个数,输出所有不同组合,共有C(n,m)种不同组合。如n=4,m=2,会产生如下输出:1 2 1 3 2 3 1 4 2 4 3 4 如n=5,m=3,会产生如下输出:1 2 3 1 2 4 1 3 4 2 3 4 1 2 5 1 3 5 2 3 5 1 4 5 2 4 5 3 4 5 题解:1. 题解一:1. 选择第i(m <=i<=n)个元素作为每个组合的最后元素,在第1————i个元素中

2020-06-04 21:27:04 16648 1

原创 多线程生产者消费者模型

1. 基础知识:1. 什么是生产者-消费者模式:比如有两个进程A和B,它们共享一个固定大小的缓冲区,A进程产生数据放入缓冲区,B进程从缓冲区中取出数据进行计算,那么这里其实就是一个生产者和消费者的模式,A相当于生产者,B相当于消费者。2. 为什么要使用生产者消费者模式:在多线程开发中,如果生产者生产数据的速度很快,而消费者消费数据的速度很慢,那么生产者就必须等待消费者消费完了数据才能够继续生产数据,因为生产那么多也没有地方放啊;同理如果消费者的速度大于生产者那么消费者就会经常处理等待状态,所以为了

2020-06-02 23:41:55 1335

原创 面试题56 - I. 数组中数字出现的次数

题目:面试题56 - I. 数组中数字出现的次数260. 只出现一次的数字 III题解:注意:x & -x 表示的含义是:获得 x 中最低位的1。代码:/** * 面试题56_1 */public class 面试题56_1 { public static int[] singleNumbers(int[] nums) { int sum = 0; int res[] = new int[2]; // sum用

2020-06-02 13:40:47 328 1

原创 137. 只出现一次的数字 II

题目:137. 只出现一次的数字 II题解:public static int singleNumber(int[] nums) { int a = 0; int b = 0; for(int i = 0; i < nums.length; i++) { a = (a ^ nums[i]) & ~b; b = (b ^ nums[i]) & ~a; } return a;}解释一下:假设有一

2020-06-02 11:59:27 327

原创 136. 只出现一次的数字

题目:136. 只出现一次的数字题解:代码:public class code136 { public static int singleNumber(int[] nums) { int ans = 0; for(int i = 0; i < nums.length; i++) { ans = ans ^ nums[i]; } return ans; } p

2020-06-02 11:31:43 133

空空如也

空空如也

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

TA关注的人

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