![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 65
铮诚
这个作者很懒,什么都没留下…
展开
-
二叉树
二叉树的遍历反转二叉树合并二叉树class Solution { public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { if(t1==null) return t2; if(t2==null) return t1; T...原创 2019-08-25 11:49:20 · 82 阅读 · 0 评论 -
二叉树的遍历
有两种通用的遍历树的策略:深度优先搜索(DFS) 在这个策略中,我们采用深度作为优先级,以便从根开始一直到达某个确定的叶子,然后再返回根到达另外一个分支。深度优先又细分为后序遍历: 访问根节点的操作在左右孩子之后前序遍历: 访问根节点的操作在左右孩子之前中序遍历: 访问根节点的操作在左右孩子之中广度优先搜索(BFS) 按照高度顺序一层层的访问整...原创 2019-08-18 15:36:48 · 99 阅读 · 0 评论 -
之字形遍历二叉树
昨天面试了美团的后端,一面最后问了一道这样的算法题,我只写了个层次遍历,那道题返回的是一个嵌套的 ArrayList ,然后我跟面试官说再遍历这个 ArrayList 将其中的需要逆序的在进行逆序。之后面试官就问我这样实现的时间复杂度,我也没答上来。 :(这道题是 LeetCode 上的会员题目,不过左程云的书里面也有。思路是使用双端队列,在遍历从左到右的层时...原创 2020-04-03 14:31:05 · 390 阅读 · 0 评论 -
二叉树每层最大值的节点
昨天下午去面试字节的后端,算法题是这一道。public class GetLevelMax { public static void main(String[] args) { // 建立一颗二叉树 TreeNode root = new TreeNode(1); root.left = new TreeNode...原创 2019-12-24 15:09:24 · 1153 阅读 · 0 评论 -
双指针
双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。167.两数之和II-输入有序数组633.平方数之和680.验证回文字符串88.合并两个有序数组141.环形链表524.通过删除字母匹配到字典里最长单词 ...原创 2019-07-28 21:21:38 · 66 阅读 · 0 评论 -
100 道算法题
左程云在牛客网上发帖子说过建议 80% 备战面试的时间放在数据结构和算法上,剩下的 20% 的时间再放在基础知识上。CYC2018 在小专栏里也说过 100 道 LeetCode 会对面试帮助很大。虽然来来回回看了好些遍左程云那个初级算法课程,但是有的地方还是记不牢,准备面试的时间大部分还是花在了阅读和理解知识点上。我觉得还是把重点放回来吧,把左程云算法课程中的题...原创 2020-01-16 14:02:20 · 215 阅读 · 0 评论 -
88.合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m =...原创 2019-08-01 23:57:56 · 73 阅读 · 0 评论 -
93.复原IP地址
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: “25525511135”输出: [“255.255.11.135”, “255.255.111.35”]class Solution { int n; String s; LinkedList<String> segments = new Lin...原创 2019-07-22 16:57:25 · 161 阅读 · 0 评论 -
141.环形链表
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], p...原创 2019-08-06 22:34:27 · 86 阅读 · 0 评论 -
167.两数之和II-输入有序数组
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7,...原创 2019-07-27 23:28:17 · 118 阅读 · 0 评论 -
226.反转二叉树
翻转一棵二叉树。示例:输入: 4 / 2 7 / \ / 1 3 6 9输出: 4 / \ 7 2 / \ / 9 6 3 1递归解法class Solution { public TreeNode invertTree(TreeNode root) { if(...原创 2019-08-24 23:05:12 · 88 阅读 · 0 评论 -
345.反转字符串中的元音字母
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1:输入: “hello”输出: “holle”示例 2:输入: “leetcode”输出: “leotcede”说明:元音字母不包含字母”y”。class Solution { // asList() 返回由指定数组支持的固定大小的列表 private final static...原创 2019-07-29 20:25:29 · 113 阅读 · 0 评论 -
412.FizzBuzz
写一个程序,输出从 1 到 n 数字的字符串表示。1. 如果 n 是3的倍数,输出“Fizz”;2. 如果 n 是5的倍数,输出“Buzz”;3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。示例:n = 15,返回:[ “1”, “2”, “Fizz”, “4”, “Buzz”, “Fizz”, ...原创 2019-07-23 23:37:35 · 96 阅读 · 0 评论 -
454.四数相加II
给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。例如...原创 2019-07-22 11:51:32 · 112 阅读 · 0 评论 -
461.汉明距离
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。class ...原创 2019-08-28 17:36:58 · 83 阅读 · 0 评论 -
524.通过删除字母匹配到字典里最长单词
给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。示例 1:输入:s = “abpcplea”, d = [“ale”,”apple”,”monkey”,”plea”]输出:“apple”示例 2:输入:s = “a...原创 2019-08-08 08:19:16 · 131 阅读 · 0 评论 -
633.平方数之和
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a^2 + b^2 = c。示例1:输入: 5输出: True解释: 1 * 1 + 2 * 2 = 5示例2:输入: 3输出: Falseclass Solution { public static boolean judgeSquareSum(int c) { i...原创 2019-07-28 22:04:05 · 111 阅读 · 0 评论 -
680.验证回文字符串II
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: “aba”输出: True示例 2:输入: “abca”输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。class Solution { public boolean validPalindrome(...原创 2019-07-31 23:26:48 · 103 阅读 · 0 评论 -
笔试处理输入模板
// 使用 BufferedReader// 接受一行作为字符数组,再将字符数组中每个字符转换为整型import java.io.*;import java.util.*;public class Main{ public static void main(String[] args)throws IOException{ BufferedRe...原创 2019-10-09 15:13:09 · 155 阅读 · 0 评论 -
算法的复杂度与Master定理
原文链接平时设计或者阅读一个算法的时候,必然会提到算法的复杂度(包括时间复杂度和空间复杂度)。比如我们说一个二分查找算法的平均时间复杂度为O(log n),快速排序可能是O(n log n)。那这里的O是什么意思?这样的表达是否准确呢?今天来复习一下与算法复杂度相关的知识:函数渐进阶,记号O、Ω、θ和o;Master定理。先插一句,在算法复杂度分析中,log...原创 2019-09-11 16:12:14 · 466 阅读 · 0 评论 -
对数器的概念与使用
验证你的流程是否正确可以通过OJ(Online Judge)和对数器两种方式。有一个我们想测的方法a实现一种绝对正确但是复杂度不好的方法b(可以用暴力法或者官方方法)实现一个随机样本产生器实现对比的方法将方法a和方法b对比很多次来验证方法a是否正确如果有一次对比出错了,打印该样本分析是哪个方法出错当样本数量很多时对比测试依然正确,可以确定方法a已经...原创 2019-09-05 15:38:03 · 99 阅读 · 0 评论 -
左神基础算法笔记-一
1. 认识时间复杂度常数时间的操作:一个操作如果和数据量没有关系,每次都是固定的时间内完成的操作,叫做常数操作。时间复杂度为一个算法流程中,常数操作数量的指标。常用O(读作big O)来表示。具体来说,在常数操作数量的表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分记为f(N),那么时间复杂度为O(f(N))。评价一个算法流程的好坏,先看时间...原创 2019-09-05 15:00:10 · 392 阅读 · 0 评论 -
左神基础算法笔记-二
以下三种排序的时间复杂度都是O(N*logN),但额外空间复杂度不同,归并排序是O(N)(辅助数组),快速排序是O(logN)(记录断点的深度),堆排序是O(1)。1. 归并排序的细节讲解与复杂度分析归并排序是一种递归,递归就是自己调用自己,定义的过程中有一个子过程,过程与子过程中的流程是一致的,但子过程的规模小于过程。base case:到什么程度不需要再划...原创 2019-09-05 23:35:48 · 221 阅读 · 0 评论 -
左神基础算法笔记-三
1. 用数组结构实现大小固定的队列和栈// 使用一个index, index比数组下标大1public static class ArrayStack { private Integer[] arr; private Integer index; public ArrayStack(int initSize) { if (i...原创 2019-09-06 00:19:51 · 208 阅读 · 2 评论 -
左神基础算法笔记-四
1. 二叉树先序、中序、后序遍历的非递归实现先序遍历:使用栈实现,栈中先压入二叉树根节点,然后循环以下过程,先弹出一个节点,随后压入该节点的右孩子,再压入该节点的左孩子……(这样弹出时就是左孩子先弹出,右孩子再弹出,满足先序)/** * Definition for a binary tree node. * public class TreeNode { * ...原创 2019-09-14 11:26:00 · 122 阅读 · 0 评论 -
左神基础算法笔记-五
1. 认识哈希函数和哈希表哈希函数哈希函数有很多种实现方式,md5,sha1。相似输入经过哈希函数后天差地别。标准哈希函数输入域是无穷的,返回值是有范围的。same input same outdifferent input maybe same out(哈希碰撞)离散性:输入域中的所有值均匀分布在返回范围上。(返回范围模后也均匀分布)(离散性越好的哈...原创 2019-09-14 17:22:25 · 162 阅读 · 0 评论 -
左神基础算法笔记-六
1. 图的表达、存储和生成方式图分为有向图和无向图,无向图可以用有向图来表示。邻接表上图用邻接表表示如下:1:22:3,43:44:null如果上图为无向图,则邻接表表示如下:1:22:1,3,43:2,44:2,3邻接矩阵上图用邻接矩阵表示如下:1:(2,7),(3,5)2:(3,2)3:null图中点的存...原创 2019-10-06 17:22:25 · 219 阅读 · 0 评论 -
左神基础算法笔记-七
1. 前缀树(trieTree/prefixTree)上图中的前缀树由“abc””abd””bcd””bkc”四个字符串组成,可以在前缀树的节点中封装数据项来增强前缀树的功能。public static class TrieNode { public int path; public int end; public TrieNode[] nexts; ...原创 2019-11-03 15:51:32 · 264 阅读 · 0 评论