- 博客(22)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 字节算法题
public static void main(String[] args) { getBase64 getbase64 = new getBase64(); long i = Long.parseLong("100"); String str = getbase64.telToBase64(i); System.out.println( str); }}class getBase64{ public String t.
2021-08-14 03:32:57
280
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 排序算法总结
912. 排序数组大佬的题解:复习基础排序算法(Java)1 选择排序思路:每一轮选取未排定的部分中最小的部分交换到未排定部分的最开头,经过若干个步骤,就能排定整个数组。即:先选出最小的,再选出第 2 小的,以此类推。参考代码 1:import java.util.Arrays;public class Solution { // 选择排序:每一轮选择最小元素交换到未排定部分的开头 public int[] sortArray(int[] nums) { in
2021-08-11 11:45:11
310
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 二叉树算法题
103. 二叉树的锯齿形层序遍历103. 二叉树的锯齿形层序遍历给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。BFS遍历class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> res=new ArrayList<
2021-08-07 14:19:04
161
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 链表算法题
链表相关算法题206. 反转链表迭代法递归法92. 反转链表 II方法一:穿针引线方法二:一次遍历(头插法)25. K 个一组翻转链表拓展1:不足k个也要反转拓展2:从尾部开始计数,k个一组翻转160. 相交链表206. 反转链表206. 反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]迭代法class Solution { public ListNode reverseLi
2021-08-07 14:07:53
206
原创 LRU总结
文章目录[146. LRU 缓存机制](https://leetcode-cn.com/problems/lru-cache/)ACM模式LRU 在 MySQL 中的应用LRU 在 Redis 中的应用面试官:来,手写一个线程安全并且可以设置过期时间的LRU缓存146. LRU 缓存机制力扣原题 class Node{ public int key; public int value; public Node next; public N
2021-08-29 13:58:25
403
原创 DFS—LC200. 岛屿数量
文章目录LC200. 岛屿数量拓展:求形状不同的岛屿的数量LC200. 岛屿数量LC200. 岛屿数量给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"],
2021-08-18 23:49:47
165
原创 LC1277. 统计全为 1 的正方形子矩阵
LC1277. 统计全为 1 的正方形子矩阵给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。示例 :输入:matrix =[ [0,1,1,1], [1,1,1,1], [0,1,1,1]]输出:15解释:边长为 1 的正方形有 10 个。边长为 2 的正方形有 4 个。边长为 3 的正方形有 1 个。正方形的总数 = 10 + 4 + 1 = 15.解法参考LC221,用 dp[i][j]=x
2021-08-18 20:40:03
312
原创 动态规划LC221. 最大正方形
LC221. 最大正方形在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。m == matrix.lengthn == matrix[i].length1 <= m, n <= 300matrix[i][j] 为 '0' 或 '1'用 dp(i,j) 表示以 (i, j)为右下角,且只包含'1' 的正方形的边长最大值。如果我们能计算出所有dp(i,j) 的值,那么其中的最大值即为矩阵中只包含'1' 的正方形的边长最大值,其平方即为最大
2021-08-18 20:03:18
147
原创 LC295. 数据流的中位数
295. 数据流的中位数中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)addNum(2)findMedian() -> 1.5addNum(3)
2021-08-15 23:16:18
101
原创 回溯算法总结
题型总结题型一:排列、组合、子集相关问题提示:这部分练习可以帮助我们熟悉「回溯算法」的一些概念和通用的解题思路。解题的步骤是:先画图,再编码。去思考可以剪枝的条件, 为什么有的时候用 used 数组,有的时候设置搜索起点 begin 变量,理解状态变量设计的想法。全排列(中等)全排列 II(中等):思考为什么造成了重复,如何在搜索之前就判断这一支会产生重复;组合总和(中等)组合总和 II(中等)组合(中等)子集(中等)子集 II(中等):剪枝技巧同 47 题、3
2021-08-12 18:21:48
278
原创 IP地址与int整数的转换
给你一个IP4的地址,请转成十进制整数 (2021-03 腾讯-PCG-前端)手撕算法: ip地址转整数 (2021-03 腾讯-TEG-后端)输入描述:输入 1 输入IP地址2 输入10进制型的IP地址输出描述:输出1 输出转换成10进制的IP地址2 输出转换后的IP地址示例1输入10.0.3.193167969729输出16777312110.3.3.193牛客地址例如,ip地址为10.0.3.193,把每段拆分成一个二进制形式组合起来为00001010.
2021-08-11 16:07:04
2868
原创 LC8. 字符串转换整数 (atoi)
8. 字符串转换整数 (atoi)class Solution { public int myAtoi(String s) { char[] chars = s.toCharArray(); int len = chars.length; //1.去空格 int index = 0; while (index < len && chars[index] == ' ') in
2021-08-11 15:49:32
142
原创 LC232. 用栈实现队列&LC155. 最小栈&LC225. 用队列实现栈
232. 用栈实现队列class MyQueue { Deque<Integer> inStack; Deque<Integer> outStack; public MyQueue() { inStack = new LinkedList<Integer>(); outStack = new LinkedList<Integer>(); } public void push(
2021-08-11 15:35:53
99
原创 LC4. 寻找两个正序数组的中位数
4. 寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。这个题解的解法三public double findMedianSortedArrays(int[] nums1, int[] nums2) { int n = nums1.length; int m = nums2.length; int left = (n + m + 1) / 2; int right = (n
2021-08-11 15:19:49
165
原创 用 Rand7() 实现 Rand10()
方法一:拒绝采样我们可以用拒绝采样的方法实现 Rand10()。在拒绝采样中,如果生成的随机数满足要求,那么久返回该随机数,否则会不断生成直到一个满足要求的随机数为止。若我们调用两次 Rand7(),那么可以生成 [1, 49] 之间的随机整数,我们只用到其中的 40 个,用来实现 Rand10(),而拒绝剩下的 9 个数,如下图所示。class Solution extends SolBase { public int rand10() { int row, col, idx
2021-08-11 14:23:50
278
原创 经典动态规划—53. 最大子序和
53. 最大子序和53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。方法一:动态规划如何定义状态?我们列出子问题如下:子问题 1:以 -2结尾的连续子数组的最大和是多少;子问题 2:以 1结尾的连续子数组的最大和是多少;子问题 3:以 -3 结尾的连续子数组的最大和是多少
2021-08-08 01:26:32
187
原创 股票买卖问题系列
股票问题系列股票问题系列通解121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II123. 买卖股票的最佳时机 III188. 买卖股票的最佳时机 IV309. 最佳买卖股票时机含冷冻期714. 买卖股票的最佳时机含手续费股票问题系列通解《股票问题系列通解》推荐阅读 @stormsunshine 编写的文章《股票问题系列通解(转载翻译)》;121. 买卖股票的最佳时机121. 买卖股票的最佳时机(只交易一次)给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支
2021-08-07 20:51:58
130
原创 n数之和系列算法题
n数之和系列算法题1. 两数之和15. 三数之和1. 两数之和1. 两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0,
2021-08-07 16:16:27
273
原创 牛客网OJ在线编程常见输入输出
牛客链接:Scannernext():只读取输入直到空格。它不能读两个由空格或符号隔开的单词。此外,next()在读取输入后将光标放在同一行中。(next()只读空格之前的数据,并且光标指向本行)nextLine():读取输入,包括单词之间的空格和除回车以外的所有符号(即。它读到行尾)。读取输入后,nextLine()将光标定位在下一行第一题题目描述计算a+b输入描述:输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据包括多组。输出描述:输出a+b的结
2021-08-06 16:11:26
417
原创 字节面试的一道算法题
题目描述求数组中比左边元素都大同时比右边元素都小的元素,返回这些元素的索引要求时间复杂度 O(n)输入:[2, 3, 1, 8, 9, 20, 12]输出:3, 4解释:数组中 8, 9 满足题目要求,他们的索引分别是 3、4题目解析最简单的思路是:遍历数组,对于每个元素分别往前、往后遍历一下,看看是否它是否满足条件。这种解法时间不符合题目要求。通过分析可以得到,对于每个元素,如果它比左侧最大的值要大,同时比右侧最小的值要小,就满足条件。那如果有这样两个数组,left_max[i] 表
2021-08-06 10:51:04
180
原创 两个50亿url文件找出共同的url
两个50亿url文件找出共同的url给A,B两个文件,各存放50亿条URL,每条URL占用64个字节,内存限制为4G,找出A,B中相同的URL。方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为,这里漏写个了a1)中。这样每个小文件的大约为300M。遍历文件b,采取和a相同的方式将url分别存储到1000小文件中(记为)
2021-08-03 12:40:35
1779
转载 n个节点的二叉树有多少种形态(Catalan数)
分析过程:(1)先考虑只有一个节点的情形,设此时的形态有f(1)种,那么很明显f(1)=1(2)如果有两个节点呢?我们很自然想到,应该在f(1)的基础上考虑递推关系。那么,如果固定一个节点后,左右子树的分布情况为1=1+0=0+1,故有f(2) = f(1) + f(1)(3)如果有三个节点,(我们需要考虑固定两个节点的情况么?当然不,因为当节点数量大于等于2时,无论你如何固定,其形态必然有多种)我们考虑固定一个节点,即根节点。好的,按照这个思路,还剩2个节点,那么左右子树的分布情况为2=2+0.
2021-08-01 19:23:21
7002
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人