算法
文章平均质量分 75
张某某。paranoia
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
必备算法总结篇
1.备战实习记录之【数组篇】+【链表篇】2.备战实习记录之【字符串篇】+【哈希表篇】(算法之字符串KMP算法(原理及源码))3.备战实习记录之【堆与堆排序】4.备战实习记录之【栈与队列篇】5.备战实习记录之【树与二叉树篇】1备战实习记录之【树与二叉树篇】2——二叉树的前中后序遍历备战实习记录之【树与二叉树篇】3——二叉树的层序遍历备战实习记录之【树与二叉树篇】4——翻转二叉树备战实习记录之【树与二叉树篇】5——二叉树的常见问题(递归+迭代 应用)备战实习记录之【树与二原创 2021-04-21 07:27:46 · 166 阅读 · 0 评论 -
2021-0411-百度后端实习笔试记录
1.完全二叉树中两个节点的最短距离问题描述对于一棵完全二叉树(对于有孩子的节点,其左孩子为2i,右孩子为2 i+1),给定的两个点之间的最短路的长度是多少?我们认为相邻两点之间的距离为1。输入描述:第一行输入一个整数T,表示测试数据共有T组对于每组测试数据,输入两个整数表示所询问的节点的标号输出描述:对于每组数据,输出一个整数表示答案解题思路最妙的解法。对于两个节点来说,分别计算其到父节点的距离并相加即可。怎样快速找到当前节点的父节点?对于完全二叉树来说,直接原创 2021-04-11 22:13:10 · 419 阅读 · 0 评论 -
备战实习记录之【回溯法】
1.回溯法解决的问题回溯法,一般可以解决如下几种问题: 组合问题:N个数里面按一定规则找出k个数的集合 排列问题:N个数按一定规则全排列,有几种排列方式 切割问题:一个字符串按一定规则有几种切割方式 子集问题:一个N个数的集合里有多少符合条件的子集 棋盘问题:N皇后,解数独等等 其中:「组合是不强调元素顺序的,排列是强调元素顺序」。 即【组合无序,排列有序】2.如何理解回溯法「回溯法解决的问题都可以抽象为树形结构」,所有回溯法的问题都可以抽象为.原创 2021-04-08 21:38:25 · 215 阅读 · 0 评论 -
Leetcode#46. 全排列+#47. 全排列 II(回溯解法+去重算法)
46. 全排列问题描述给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解题思路这道题是求一组数的所有全排列。首先全排列与组合相比,主要区别在于全排列长度必须是nums数组大小(即包含所有元素);其次全排列是有序的,而组合是无序的。(即对于全排列来说,【1,2】和【2,1】是两个不同的排列)...原创 2021-04-08 17:39:16 · 197 阅读 · 0 评论 -
Leecode#78. 子集+#90. 子集 II(回溯+解决重复元素不重复组合问题)
78. 子集问题描述给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示: 1 <= nums.length <= 10 -10 <= nums[...原创 2021-04-08 16:47:23 · 312 阅读 · 0 评论 -
Leetcode#77. 组合(回溯解法+剪枝优化)
77. 组合问题描述给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]解题思路解法一:一开始集合是 1,2,3,4, 从左向右取数,取过的数,不再重复取。第一次取1,集合变为2,3,4 ,因为k为2,我们只需要再取一个数就可以了,分别取2,3,4,得到集合[1,2] [1,3] [...转载 2021-04-08 12:09:23 · 340 阅读 · 0 评论 -
备战实习记录之【栈与队列篇】
五、栈与队列篇1.栈1.1.「栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。」所以STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)。1.2栈的内部结构,栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现。1.3「常用的SGI STL,如果没有指定底层实现的话,默认是以deque为缺省情况下栈的低层结构。」deque是一个..原创 2021-03-17 21:22:17 · 135 阅读 · 0 评论 -
Leetcode#347. 前 K 个高频元素 (Java解法+堆与堆排序)
问题描述给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示: 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一...原创 2021-03-17 17:47:17 · 354 阅读 · 0 评论 -
备战实习记录之堆与堆排序
1.堆堆是一种特殊的树,只要满足下面两个条件,它就是一个堆:(1)堆是一颗完全二叉树;(2)堆中某个节点的值总是不大于(或不小于)其父节点的值。其中,我们把根节点最大的堆叫做大顶堆,根节点最小的堆叫做小顶堆。2.堆详解2.1满二叉树满二叉树是指所有层都达到最大节点数的二叉树。比如,下面这颗树:2.2完全二叉树完全二叉树是指除了最后一层其它层都达到最大节点数,且最后一层节点都靠左排列。比如,下面这颗树:可见,其实满二叉树是一种特殊的完全二叉树。那么,使用什么转载 2021-03-17 17:45:51 · 195 阅读 · 0 评论 -
Leetcode#239. 滑动窗口最大值 (Java解法)
问题描述给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 ...原创 2021-03-16 20:31:42 · 574 阅读 · 0 评论 -
Leetcode#150. 逆波兰表达式求值 (Java解法+栈应用)
问题描述根据 逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明: 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 2:输入: ["4", "13", "5...原创 2021-03-16 16:50:24 · 136 阅读 · 0 评论 -
Leecode#28. 实现 strStr() (Java实现+KMP解法)
问题描述:解决思路:Java代码:class Solution { public int strStr(String haystack, String needle) { int n1 = haystack.length(); int n2 = needle.length(); if(n2 == 0) return 0; int [] next = new int [n2]; getNext(n..原创 2021-03-11 21:07:55 · 245 阅读 · 1 评论 -
一 . 暴力破解与实用性优先
做题目时:能枚举就枚举,能逆向就逆向,先试探一个解。1. 猜年龄【问题描述】美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你推算一下,他...原创 2018-03-28 19:40:23 · 662 阅读 · 0 评论 -
二. 递归原理与构造技巧
递归:即自己调用自己。将规模较大的问题,化为与之结构相同的规模更小的问题。尾递归技术:解决了栈溢出及内存不够用的问题递归的每一次调用都是一个压栈的过程(保持当前函数的参数)递归的要求: ①找相似性(设置相似性) ②设置出口1. 串的翻转【问题描述】【源代码】【JAVA:于航】public class A{ static String f(String s){ if(...原创 2018-03-28 20:08:27 · 527 阅读 · 0 评论 -
三.典型问题的递归框架
主要内容:①排列问题②组合计数问题③组合枚举问题④递归设计递归的难点在于:相似性的设计,如何设计参数才能相似最常见的问题:排列问题=排列计数+排列枚举组合问题=组合计数+组合枚举重点是:排列枚举问题关键点:不重不漏递归也是暴力解法的一种,相比循环而言,循环是需要确定循环次数的1. 搭积木【问题描述】小明最近喜欢搭数字积木。一共有10块积木,每个积木上有一个数字,0~9。搭积木规则:每个积木放到其它...原创 2018-03-28 20:56:04 · 380 阅读 · 0 评论 -
有理数类实现大数的四则运算
java:实现对有理数的加减乘除运算,以及求最大公约数并约分。 文件1:Fraction.java[java] public class Fraction { int num; int den; } 文件2:Rational.java[java] public class Rational { int a; int b; Fraction f = new...原创 2018-03-28 21:56:56 · 341 阅读 · 0 评论 -
四.数学知识的运用
主要内容: ①并非数学竞赛 ②进制问题及其巧妙运用 ③整数与整除问题 ④欧几里得扩展定理 ⑤有理数表示,大数问题1. 奇怪的捐赠地产大亨Q先生临终的遗愿是:拿出100万元给X社区的居民抽奖,以稍慰藉心中愧疚。麻烦的是,他有个很奇怪的要求: 100万元必须被正好分成若干份(不能剩余)。每份必须是7的若干次方元。比如:1元, 7元,49元,343元,… 相同金...原创 2018-03-28 21:58:35 · 411 阅读 · 0 评论 -
五.博弈问题的思路
1. 日期与星期大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:179...原创 2018-03-29 17:05:40 · 675 阅读 · 0 评论 -
文本相似性算法Simhash原理及实践
simhash(局部敏感哈希)的原理simhash的背景simhash广泛的用于搜索领域中,也许在面试时你会经常遇到这样的问题,如果对抓取的网页进行排重,如何对搜索结果进行排重等等。随着信息膨胀时代的来临,算法也在不断的精进,相似算法同样在不断的发展,接触过lucene的同学想必都会了解相似夹角的概念,那就是一种相似算法,通过计算两个向量的余弦值来判断两个向量的相似性,但这种...转载 2019-03-04 16:17:44 · 2153 阅读 · 0 评论 -
六.分治法与动态规划
主要内容: ①分治思想的重要性 ②二分法是基础 ③动态规划问题的求解次序 ④复杂问题的规划 递归:分成小规模的问题(一个小,一个大) 分治:主要是二分法1. 二分查找已知有序的序列,比如:2,3,3,5,9,9,9,12,12,13,15,22,22,22,22,25,25,23,91,95有整数x,比如: x=23要求找到一个刚好比x稍微大一点的元素位...原创 2018-03-29 17:41:12 · 426 阅读 · 0 评论
分享