- 博客(41)
- 收藏
- 关注
原创 TIJ——第11章:Collection和Iterator
Collection和AbstractCollection AbstractCollection实现了Collection接口,是一个抽象类,有两个抽象方法: 1:public abstract Iterator iterator(); 2:public abstract int size(); Collection接口的其他方法,都有默认的实现;其中: 1:isEmpty()方法调用size()来判断 2:contains()、containsAll()、toArray()方法是通过循环iterator(
2020-07-16 17:45:13
198
原创 剑指offer 栈的压入、弹出序列
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 题解: 例1 压栈:1 2 3 4 5 出栈:4 5 3 2 1 就是看出栈顺序,...
2019-12-18 03:58:02
124
原创 剑指offer 二叉树的下一个结点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 题解: ①如果一个节点有右子树,那么它的下一个节点就是它的右子树中的最左子节点。 ②一个节点没有右子树: ①如果节点是父节点的左子节点,它的下一个节点是他的父节点 ②如果节点是父节点的右子节点,沿着指向父节点的指针一直往上遍历,直到找到一个是它父节点的左...
2019-12-15 05:46:33
100
原创 剑指offer 数组中只出现一次的数字
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 题解: 就是说先把所有数据异或,然后得到的结果是两个唯一出现过一次的数的异或结果,找出他们异或结果中第一个为1的位置,比如这个位置记作k,然后把第k位为1的所有数据分在一组,为0的分在另一组,这样同样的数据肯定被分为了两组,并且两个只出现唯一一次的数据都分在了两组。 //num1,num2...
2019-12-12 18:15:57
94
原创 Java并发指南6:AQS中的公平锁与非公平锁,Condtion
公平锁和非公平锁只有两处不同 非公平锁在调用 lock 后,首先就会调用 CAS 进行一次抢锁,如果这个时候恰巧锁没有被占用,那么直接就获取到锁返回了。 非公平锁在 CAS 失败后,和公平锁一样都会进入到 tryAcquire 方法,在 tryAcquire 方法中,如果发现锁这个时候被释放了(state == 0),非公平锁会直接 CAS 抢锁,但是公平锁会判断等待队列是否有线程处于等待状态,...
2019-09-10 21:42:37
703
原创 Java并发指南2:ThreadLocal
ThreadLocal是线程变量,在多线程环境下,可以保证各个线程之间的变量互相隔离、相互独立。 ThreadLocal常用方法介绍: ThreadLocal提供了set和get访问器用来访问与当前线程相关联的线程局部变量。 每个线程中都有一个ThreadLocalMap数据结构,在线程中,可以通过ThreadLocal的get()/set()方法来访问变量。 (ThreadLocal只有一个,...
2019-09-03 18:03:27
159
原创 重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化(explain)
磁盘IO与预读 磁盘读取数据靠的是机械运动 每次读取数据花费的时间可以分为 ①寻道时间:磁臂移动到指定磁道所需要的时间 ②旋转延迟:旋转延迟就是我们经常听说的磁盘转速 ③传输时间:传输时间指的是从磁盘读出或将数据写入磁盘的时间 考虑到磁盘IO是非常高昂的操作,计算机操作系统做了一些优化,当一次IO时,不光把当前磁盘地址的数据,而是把相邻的数据也都读取到内存缓冲区内,因为局部预读性原理告诉我们,当计...
2019-08-26 19:13:16
146
原创 剑指offer 数组中重复的数字(HashMap)
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 HashMap做法: import java.util.*; public class Solution { //...
2019-08-08 13:29:55
263
原创 剑指offer 数字在排序数组中出现的次数
题目描述 统计一个数字在排序数组中出现的次数。 题解思路: 数组是排序的,并且是查找,应该想到二分查找。 但是并不是找那个数出现的范围,因为如果整个数组都是同一个数的话复杂度就是O(n) ...
2019-08-06 13:35:18
90
原创 leetcode remove-nth-node-from-end-of-list输出链表的倒数第n个结点
这道题让我们移除链表倒数第N个节点,限定n一定是有效的,即n不会大于链表中的元素总数。还有题目要求我们一次遍历解决问题,那么就得想些比较巧妙的方法了。比如我们首先要考虑的时,如何找到倒数第N个节点,由于只允许一次遍历,所以我们不能用一次完整的遍历来统计链表中元素的个数,而是遍历到对应位置就应该移除了。 那么我们需要用两个指针来帮助我们解题,pre和cur指针。首先cur指针先向前走N步,如果此时c...
2019-04-26 17:51:56
138
原创 leetcode valid-parentheses栈
题意: 给定一个仅包含字符’(’、’)’、’’、’’、’[‘和’]'的字符串,确定输入字符串是否有效。 括号必须以正确的顺序关闭,“()”和“()[]”均有效,但“(]”和“([)]”无效。 题解: [ ( { [ ] ( ) } ) ] ( ) 这样是正确的 可以左括号进栈,右括号出栈,出栈时看看跟右括号符不符合,还有字符是右括号但是栈已经为空的情况,以及字符串遍历完后栈中还有剩余的情况也是fa...
2019-04-26 16:38:55
305
原创 leetcode next-permutation数组排列
实现下一个排列,它将数字重新排列到词典中的下一个更大的数字排列中。 如果这种排列不可能,则必须将其重新排列为尽可能低的顺序(即按升序排序)。 替换必须到位,不要分配额外的内存。 下面是一些例子。输入在左列,相应的输出在右列。 1,2,3→1,3,2 3,2,1→1,2,3 1,1,5→1,5,1 比如第一组的排列从小到大的顺序是 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 ...
2019-04-23 21:15:56
208
原创 leetcode construct-binary-tree-from-preorder-and-inorder-traversal给树的先序跟中序,求树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 /** * Definition for binary tree * public class TreeNode { * int val; * ...
2019-04-23 18:31:16
147
原创 leetcode binary-tree-level-order-traversal-ii倒序输出树的每一层
For example: Given binary tree{3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7 return its bottom-up level order traversal as: [ [15,7] [9,20], [3], ] 解法一: 每次将list保存到结果list的0下标的位置 /**...
2019-04-23 00:16:24
124
原创 leetcoe plus-one数组加一进位
给你一个数组,表示一个多位数,现在需要加1,输出加1后的数组 比如 1999 输出 2000 public class Solution { public int[] plusOne(int[] digits) { int len = digits.length; for(int i=len-1;i>=0;i--){ if(((...
2019-04-21 02:23:00
217
原创 leetcode symmetric-tree判断两颗树是否对称
对于二叉树,检查它是否是自身的镜像(即,围绕其中心对称)。 例如,此二叉树是对称的: 1 / \ 2 2 / \ / \ 3 4 4 3 这个不对称 1 / \ 2 2 \ \ 3 3 BFS /** * Definition for binary tree * public class TreeNode { * ...
2019-04-15 00:18:43
178
原创 leetcode permutations数字dfs
给定一组数字,返回所有可能的排列。 例如, [1,2,3]有以下排列: [1,2,3]、[1,3,2]、[2,1,3]、[2,3,1]、[3,1,2]和[3,2,1]。 用dfs,多熟悉ArrayList的用法 import java.util.*; public class Solution { ArrayList<ArrayList<Integer>> res;...
2019-04-14 22:12:43
141
原创 leetcode remove-duplicates-from-sorted-list有序链表去重
For example, Given1->1->2, return1->2. Given1->1->2->3->3, return1->2->3. /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNod...
2019-04-14 18:28:59
273
原创 leetcode count-and-say字符串
这道题算就是字符串处理的问题,序列中第一个字符串是“1”,接下来依次统计前一个字符串中连续相同字符的数量,并添加到下一字符串中。前15字符串如下(LeetCode上貌似只有18测试用例): 1 11 21 1211 111221 312211 13112221 1113213211 31131211131221 13211311123113112211 1113122113311213211321...
2019-04-14 16:14:17
120
原创 leetcode swap-nodes-in-pairs交换两两结点
题意: 给定一个链表,交换每两个相邻节点并返回其头部。 例如, 在1->2->3->4中,您应该返回列表as2->1->4->3。 您的算法应该只使用常量空间。不能修改列表中的值,只能更改节点本身。 如果是基数,最后一个节点不需要交换 /** * Definition for singly-linked list. * public class ListN...
2019-04-12 21:05:19
137
原创 leetcode binary-tree-level-order-traversal输出树的每一层
题意: 给定二叉树,返回其节点值的级别顺序遍历。 For example: Given binary tree{3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7 return its level order traversal as: [ [3], [9,20], [15,7] ] /** * Definition...
2019-04-12 19:18:47
145
原创 leetcode spiral-matrix-ii 数组顺时针填值
题意: 给定一个整数n,生成一个以螺旋顺序填充从1到n 2元素的正方形矩阵。 例如, n=3, 您应该返回以下矩阵: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 这个代码中,当n为基数时,最后col会比scol小一位,最中间那点手动加上 public class Solution { public int[][] generateMatrix...
2019-04-12 18:55:26
168
原创 leetcode jump-game贪心+dp
题意: 给定一个非负整数数组,您首先被定位在数组的第一个索引处。 数组中的每个元素表示该位置的最大跳跃长度。 确定是否能够到达最后一个索引。 例如: A=[2,3,1,1,4],返回真。 A=[3,2,1,0,4],返回假。 解题: 定义一个能跳跃达到的最大长度maxlen = A[0]+1 然后遍历A数组 如果最大长度不能跳到当前点i+1,返回false 如果最大长度能达到终点len,返回tru...
2019-04-12 16:09:15
165
原创 leetcode remove-duplicates-from-sorted-array 数组去重
题目: 给定一个已排序的数组,将重复项移除到位,这样每个元素只出现一次,并返回新的长度。 不要为另一个数组分配额外的空间,必须在内存恒定的情况下就地分配。 例如, 给定输入数组a=[1,1,2], 您的函数应该返回length=2,而a现在是[1,2]。 public class Solution { public int removeDuplicates(int[] A) { ...
2019-04-11 21:02:52
197
原创 leetcode generate-parentheses括号回溯
给定n对括号,编写一个函数来生成格式良好的括号的所有组合。 例如,给定n=3,解集为: For example, given n = 3, a solution set is: “((()))”, “(()())”, “(())()”, “()(())”, “()()()” 关键: 每次左括号比右括号多时可以加左括号或者右括号 x>y && x<n 如果左括号等于右括号...
2019-04-05 04:40:35
145
原创 leetcode merge-two-sorted-lists 合并两个有序链表
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public...
2019-04-05 03:03:42
131
原创 leetcode binary-tree-inorder-traversal输出树的中序遍历
左根右 递归版本: /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ import java.util.*; pub...
2019-04-04 21:11:02
150
原创 leetcode search-a-2d-matrix在矩阵中查找一个数
有一个n*m的矩阵,满足以下特点:每行从小到大排序,每行的第一个数比上一行的最后一个数大。 给你一个数,查找这个数是否在矩阵中。 矩阵拉直就是一个有序排序的数组,直接二分查找。 public class Solution { public boolean searchMatrix(int[][] matrix, int target) { int n = matrix.le...
2019-04-04 17:35:39
374
原创 leetcode rotate-image矩阵数组顺时针90度旋转
找规律 public class Solution { public void rotate(int[][] matrix) { int n = matrix.length; int res[][]=new int[n+1][n+1]; for(int i=0;i<n;i++){ for(int j=0;j&...
2019-04-04 17:06:02
270
原创 leetcode search-insert-position查找
给定排序数组和目标值,如果找到目标,则返回索引。如果没有,则返回按顺序插入索引的位置。 您可以假定数组中没有重复项。 这里有几个例子。 [1,3,5,6], 5 → 2 [1,3,5,6], 2 → 1 [1,3,5,6], 7 → 4 [1,3,5,6], 0 → 0 ...
2019-04-04 16:06:04
134
原创 leetcode unique-paths动态规划
机器人位于M x N网格的左上角(下图中标记为“开始”)。 机器人只能在任何时间点向下或向右移动。机器人正试图到达网格的右下角(在下图中标记为“完成”)。 有多少可能的唯一路径? 很简单的动态规划,dp[i][j]表示走到(i,j)有多少条路径 public class Solution { public int uniquePaths(int m, int n) { i...
2019-04-03 02:53:25
168
原创 leetcode best-time-to-buy-and-sell-stock 求最大连续和变型
假设你有一个数组,里面存放的第i个元素表示第i天的股票的价格,如果你最多只允许进行一次交易(买进和卖出股票视为一次交易) 请设计一个算法得到最大利润。 解题思路: 在满足i<j的情况下,找出一个最低值prices[i]跟最高值prices[j] 跟求最大连续和一样 public class Solution { public int maxProfit(int[] prices) {...
2019-04-03 01:54:04
121
原创 leetcode same-tree 判断两棵树是否相等
两棵树结构以及val相等则为相同的tree 有递归跟非递归两种写法 判断一下两棵树的是否同时有左右节点,当前节点val是否相同即可 递归写法 /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * ...
2019-04-02 04:53:45
260
原创 leetcode populating-next-right-pointers-in-each-node 链表中同一层的结点连接起来
简单点就是,给定完全二叉树,将它每一层的顶点串起来 Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } For example Given the following perfect bi...
2019-04-02 03:47:37
133
原创 leetcode container-with-most-water
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 说明:你不能倾斜容器,且 n 的值至少为 2。 图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色...
2019-04-01 21:23:14
223
原创 leetcode best-time-to-buy-and-sell-stock-ii 贪心
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = ...
2019-04-01 16:23:37
109
原创 leetcode maximum-depth-of-binary-tree 求树的深度
递归写法 /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ import java.util.*; public c...
2019-04-01 06:17:41
140
原创 Leetcode linked-list-cycle 判断链表是否有环
使用快慢指针看是否相遇 /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ p...
2019-03-27 20:50:49
244
原创 leetcode insertion-sort-list 使用插入排序对链表排序
使用插入排序对链表排序。 插入排序就是不断的向一个已经排序的列表中(此处为代码中的sortedList)添加新的节点,并且保证添加节点后的列表仍然有序。 这里用把排好序的头节点为head,未排序的为last 每次排序让h=head hl = head的前一个节点 让last与h对比大小 /** * Definition for singly-linked list. * public clas...
2019-03-27 20:48:30
283
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人