- 博客(19)
- 收藏
- 关注
原创 LeetCode 面试题 02.06. 回文链表
编写一个函数,检查输入的链表是否是回文的。示例 1:输入:1->2输出: false示例 2:输入:1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?进阶解法:把原链表分为两部分,将后半部分的链表反转,逐一比较值是否相等。/** * Definition for sing...
2020-02-14 18:46:19 284
原创 LeetCode 746. 使用最小花费爬楼梯,多解法实现(穷举、递归、动态规划)
数组的每个索引做为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从c...
2020-01-30 23:42:57 403
原创 ReentrantLock的公平锁源码分析
## AbstractQueuedSynchronizer#acquire```java/*** 尝试获取锁* Acquires in exclusive mode, ignoring interrupts. Implemented* by invoking at least once {@link #tryAcquire},* returning on success. Otherwise the thread is queued, possibly* repeatedly ...
2021-06-25 01:16:48 221
原创 LeetCode 面试题 04.04. 检查平衡性
实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \...
2020-02-15 20:58:00 294
原创 LeetCode之剑指Offer面试题40. 最小的k个数
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]限制:0 <= k <= arr.length &l...
2020-02-12 20:56:50 270
原创 LeetCode之剑指Offer面试题31. 栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2...
2020-02-12 19:46:11 172
原创 LeetCode 1009. 十进制整数的反码
每个非负整数N都有其二进制表示。例如,5可以被表示为二进制"101",11 可以用二进制"1011"表示,依此类推。注意,除N = 0外,任何二进制表示中都不含前导零。二进制的反码表示是将每个1改为0且每个0变为1。例如,二进制数"101"的二进制反码为"010"。给定十进制数N,返回其二进制表示的反码所对应的十进制整数。示例 1:...
2020-01-29 21:05:40 199
原创 LeetCode88. 合并两个有序数组
给定两个有序整数数组nums1 和 nums2,将 nums2 合并到nums1中,使得num1 成为一个有序数组。说明:初始化nums1 和 nums2 的元素数量分别为m 和 n。你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 =...
2020-01-29 18:50:09 96
原创 206. 反转链表
题目描述:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?/*** Definition for singly-linked list.* public class ListN...
2020-01-23 22:55:57 90
原创 将有序链表转换二叉搜索树
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 ...
2020-01-19 22:12:43 146
原创 LeetCode 15. 三数之和
今天来说说LeetCode上的三数之和,这道题如果不考虑时间复杂度的话,可以暴力的直接用三个for循环来解决,当然了要注意去重。但是用三个for循环效率非常差并且可能会超时,所以这里提供另一种解法:双指针。双指针:维护两个索引i,j,i一般是0,j一般是数组的长度-1,根据需求让i向右移动或者让j向左移动,结束条件为:i >= j。下面先给出暴力的解法,注意去重。给定一个包含 ...
2019-09-16 01:01:23 176
原创 Java实现快排
排序算法有很多,相对于两层for循环实现的冒泡排序算法或者插入排序算法,排序算法的时间复杂度还是比较理想的。基本思想就是:找到一个基准数,然后在数组左边找比这个基准数小的数和数组右边比这个基准数大的数交换,一般基准数选择第一个即可。下面给出java实现的快排。//快排private void quicksort(int[] nums,int left,int right){ ...
2019-09-09 00:24:36 154
原创 牛客之将满二叉树转换为求和树
这是牛客上的一道编程题,下面先看一下题目的描述。题目描述给满出二叉树,编写算法将其转化为求和树什么是求和树:二叉树的求和树, 是一颗同样结构的二叉树,其树中的每个节点将包含原始树中的左子树和右子树的和。二叉树: 10 / \ -2 6 / \...
2019-09-08 15:46:54 749
原创 牛客之牛牛的背包问题
今天在牛客上发现了一道比较有趣的背包问题,乍一看以为是动态规划问题,其实仔细看是回溯算法问题,下面是题目。题目描述牛牛准备参加学校组织的春游, 出发前牛牛准备往背包里装入一些零食, 牛牛的背包容量为w。牛牛家里一共有n袋零食, 第i袋零食体积为v[i]。牛牛想知道在总体积不超过背包容量的情况下,他一共有多少种零食放法(总体积为0也算一种放法)。输入描述:输入包括两行第...
2019-09-08 13:37:54 384
原创 LeetCode之子集问题
最近在LeetCode上学习算法,遇到一些比较有意思的题目都会做笔记,可惜没什么时间来写博客,今天学习累了想放松一下就写了这篇博客。好了,进入正文,这篇博客是LeetCode上的子集问题,和子集II问题。LeetCode78. 子集给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3...
2019-09-07 22:17:08 239
原创 LeetCode 1104. 二叉树寻路
在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按“之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。示例 ...
2019-08-04 00:41:25 302
原创 82. 删除排序链表中的重复元素 II
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。示例1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例2:输入: 1->1->1->2->3输出: 2->3下面是java代码的实现,此处用的是原地算法,算法是自己写的,博客也是自己写...
2019-07-21 22:16:45 128
原创 SpringMvc对时间类型的转换
问题:接触过web的都知道,前端的form表单传给后台的数据类型都是字符串,如果空着则为空字符串'',而不是null,那么问 题来了,当后台的字段类型是java.lang.Date类型的数据的时候,我们应该如何对他进行转换类型,SpringMvc能对简单 类型的数据进行自动类型转换,但显然这并不包括java.lang.Date类型。还有一个问题便是:...
2018-07-07 15:57:55 1434
原创 三整数排序问题的两种解法
题目:输入三个整数,从小到大排序后输出。 样例输入:20 7 33 样例输出:7 20 33分析: 解决这道题的方法有很多种,这里主要阐述两种方法,其一:#include <stdio.h>int main(){ int a,b,c,t; scanf("%d%d%d",&a,&b,&c); if(...
2018-07-07 15:15:54 529
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人