随笔分类 - [802]数据结构与算法
理论知识
摘要:这几道题是我在面试中亲身经历的,在面试滴滴的过程中,我遇到过最大子数组和;在面试阿里的过程中,我遇到过最长重复子串;在面试头条过程中,我遇到过最长无重复字符子串。 1. 最大子数组和 比如,给定一个数组, 1, -2, 3, -4, 5, 6, -7 应该输出, 11。 public static
阅读全文
摘要:苏君君出了一道题,是牛客网上面的: 输入一个int型整数,输出该数二进制表示中1的个数。其中负数用补码表示。 其实这道题并不难,大家很容易想到的解法是转成字符串的思路,即如下所示: 但是这样运算速度不快。经过魏印福的点拨,知道了Redis中采用的variable-precision SWAR算法,这
阅读全文
摘要:一、引言 《剑指offer》可谓是程序猿面试的神书了,在面试中帮了我很多,大部分面试的算法题都会遇到原题或者是类似的题。但是书上的代码都是C版的,我在这里整理了一份Java版的代码供大家学习参考,这些代码我都是在OJ上跑过全AC的,所以正确性你大可放心。 二、目录 三、代码实现 1-10题 11-2
阅读全文
摘要:1. 两数之和 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: LeetCode:https://leetcode-cn.com/problems/two-sum/description/ 思路: 两层for循环时
阅读全文
摘要:单调栈是一种理解起来很容易,但是运用起来并不那么简单的数据结构。一句话解释单调栈,就是一个栈,里面的元素的大小按照他们所在栈内的位置,满足一定的单调性。 题目是这样的,给一个数组,返回一个大小相同的数组。返回的数组的第i个位置的值应当是,对于原数组中的第i个元素,至少往右走多少步,才能遇到一个比自己
阅读全文
摘要:1. 36进制大整数相加 两个36进制的大整数以字符串的形式给出,求出两个大整数的和,并以字符串方式输出。(头条面试题) 比如:12346 + GSFTYHS = GSGW1LY 2. 两个单链表求和 镜像:http://www.cnblogs.com/DarrenChan/p/5724502.ht
阅读全文
摘要:设计并实现最不经常使用(LFU)缓存的数据结构。它应该支持以下操作:get 和 put。 get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1。put(key, value) - 如果键不存在,请设置或插入值。当缓存达到其容量时,它应该在插入新项目之前,使最不经常使用的
阅读全文
摘要:这三个排序的时间复杂度都是O(nlogn),所以这里放到一起说。 1. 快速排序 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法
阅读全文
摘要:1. 二叉树前序中序后序遍历(递归和非递归) 构造二叉树: 递归版前序遍历: 递归版中序遍历: 递归版后序遍历: 非递归版前序遍历: 非递归版中序遍历: 非递归版后序遍历: 这里用了两个栈,其实一个栈也能实现,这里这样做是因为可以和前序遍历对比着记,比较容易。 2. 二叉树层次遍历 给定一个二叉树,
阅读全文
摘要:1. 10亿个数中找出最大的1000个数 这种题目就是分治+堆排序。 为啥分治?因为数太多了,全部加载进内存不够用,所以分配到多台机器中,或者多个文件中,但具体分成多少份,视情况而定,只要保证满足内存限制即可。什么,如何分?Hash(num)% numOfFiles。 为啥堆排序?首先堆排序是一种选
阅读全文
摘要:在大型web应用中,缓存可算是当今的一个标准开发配置了。在大规模的缓存应用中,应运而生了分布式缓存系统。分布式缓存系统的基本原理,大家也有所耳闻。key-value如何均匀的分散到集群中?说到此,最常规的方式莫过于hash取模的方式。比如集群中可用机器适量为N,那么key值为K的的数据请求很简单的应
阅读全文
摘要:描述: 给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。 给出 num = 38。 相加的过程如下:3 + 8 = 11,1 + 1 = 2。因为 2 只剩下一个数字,所以返回 2。 分析: 这道题并不难,只能说用好递归吧。 方法一: 方法二:
阅读全文
摘要:题目描述:一个链表,奇数位升序偶数位降序,让链表变成升序的。 比如:1 8 3 6 5 4 7 2 9,最后输出1 2 3 4 5 6 7 8 9。 分析: 这道题可以分成三步: 首先根据奇数位和偶数位拆分成两个链表。 然后对偶数链表进行反转。 最后将两个有序链表进行合并。 合并两个单链表,还可以采
阅读全文
摘要:1. 循环打印矩阵 比方提供以下矩阵: 按照如下顺序打印出来: 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 这道题直接写也没问题,就是特别容易出错,稍不留意就写错,而且这类题型我想要一种普适性的解法。 我想到的一种方法就是一圈一圈打印,从外到内,我们确定一个矩形,通
阅读全文
摘要:设计和实现一个 LRU(最近最少使用)缓存 数据结构,使它应该支持以下操作: get 和 put 。 get(key) - 如果密钥存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。put(key, value) - 如果密钥不存在,请设置或插入值。当缓存达到其容量时,它应该在插入新项目之前
阅读全文
摘要:最近在忙着找实习,因而做了大量的笔试算法题,阿里,网易,腾讯,华为,发现各大厂商都喜欢出递归和动态规划题,而且出的特别多,这种题以前一直没有搞懂,总是半懂状态,现在感觉有必要好好整理一下。 1. 斐波那契数列 谈到递归问题,我们不妨先从斐波那契数列开始,这个大家应该都不陌生吧,1,1,2,3,5,8
阅读全文
摘要:首先我们对读写锁做一个概述: 假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写,也就是说:读-读能
阅读全文
摘要:题目: 思路: 这道题开始我完全没明白在讲啥,可能是我自己算法这块训练太少了吧,也是看了好久才明白。开始说“向三位同学提到。。。”,我以为除了两位同学之外还有别人,额,好吧,并没有。。。还有它的输入输出范例开始折叠着,完全没看到好吧。。。并且输入范例给的两个参数,给的代码模板的方法就传了一个参数,也
阅读全文
摘要:题目描述: 使用字母来表示一个正整数,用小写字母表示。映射规则很简单,如下所示: a 1 b 2 ... z 26 aa 27 ab 28 ... huawei 104680767 ... 输入描述: 输入字母最少1位,最多6位,且字母只能是小写字母。输入的十进制数不超过32位整数最大值。 判断输入
阅读全文
摘要:题目描述: 编写拼音与英文转换的函数,如果输入号码是英文,转成拼音,如果是拼音,转成英文,例如输入OneZeroDoubleThree,则输出YiLingSanSan。 拼音、英文见下表: Yi Er San Si Wu Liu Qi Ba Jiu Ling One Two Three Four F
阅读全文