算法题整理

 

 

链表:

一个单链表,奇数位升序,偶数位降序,输出排序后的单链表。(写了个归并,拆成两个单链表并且把偶数位做头插翻转过来,再归并到一起。)

链表节点两两反转

奇偶链表

单向链表,头尾奇偶交替输出(中等)

K个一组反转链表

链表是否相交

两个链表的大数相加问题

链表找环、环形街道上偷东西,不能挨着偷(反正就是个挺简单的DP,扫两遍) 10min.

链表按指定size翻转.

手写链表合并,从创建链表到合并,main里面输出(链表也自己实现)

第二题是输出交错后的链表(比如链表a-b-c-d-e,交错后输出为a-e-b-d-c)

两个有序链表合并

链表求和

旋转链表

带有随机指针链表的深拷贝

子序列:

s2是否是s1的子序列(可以不连续)

最大子序列和与子序列首尾位置

.最大子序和

一个无限长的有序序列,在这个序列中找出最靠近给定target的值的位置

字符串:

两个字符串的最长公共子序列

给字符串由字符和下划线组成,反转字符,例a_hello_word变为a_ollehdrow___,问时间复杂度空间复杂度,因为使用了库函数reverse,要求自己实现一个reverse函数

一个字符串,比如abc123/f/ecd,连续的数字或者连续的字母,或者反斜杠后和后面一个字符,视为一个整体,反转之。比如这时输出应该是cd/e/f123abc

识别"a=b&c=d&d=e"这种类型的字符串,保存在map里

最长回文字串

一个字符串str,输出字符串str中的连续最长的自增数字串 
输入:sl13245sldkf45678dkfj789
输出:45678
S = "3[a]2[bc]" return "aaabcbc"
S = "3[a2[c]]" return "accaccacc"
S = "2[abc]3[cd]ef" return "abcabccdcdcdef"

滑动窗口寻找满足的字符串

匹配字符串

删除字符串中ab,保证最后字符串没有连接的ab,例aaabbb
循环队列

四则运算,把一个字符串“1+2*3/(4+5)”计算成double出来

字符串数组两个字符串的最小距离(easy)

反转字符串

给定字符串,判断三种括号是否成对出现。

最大不重复子字符串长度

字符串解码

比如一个字符串ajxnhdbdosjbsorange,模式“o*ge”,找到匹配的最小字符串下标范围。

一个字符串,假设空足够,将其中所有空格替换为"%20",要求不开辟额外新空间

删除字符串中的space,原地时间O(n)空间O(1);求一棵二叉树中根到叶子的最近距离(不能声明全局变量,O(n)).

数组:

大数相乘(题没撕出来,卒)

2个有序数组求第k大

一个数组,保存了0-9的元素,有两个数字只出现了一次,其他数字出现了若干次,找到这两个数字 时间O(n) 空间O(1)

一个数组的所有子集(用递归写)

缺失的第一个正数(做过简单说了下思路)

四数字之和

机场有很多架飞机,每架不同起飞时间,找到天空中最多的飞机的时间

给定字符矩阵,单词,判断矩阵里有没有该一条路径组成该单词

.输入二维0/1矩阵,输出同大小的,每个位置代表输入矩阵里距离0的最近距离(bfs)

找出数组里出现次数大于n/k的数

给定数组,求连续子串的最大和

数组中和最大的连续子数组(mid)

遍历螺旋矩阵

找波谷数;

k个有序数组合并 还要算时间复杂度

查找有序数组中元素插入的位置,类似leetcode35

n个元素的数组找到第k大的数,最小时间复杂度(讨论到最后写了个堆排) (BFPTR算法)

有序整数数组所有数的平方值中有多少种不同的取值

两个排序数组,找中位数

旋转数组找数

找出数组中的k数(左边所有的数都比k数小)

旋转矩阵

1-100,报号,每次剔除奇数位置的人,问这样剔除以后最后剩下的是几号?64

矩阵相乘

两个无序数组怎么找交集

最大化股票交易

)给定一个二维数组,从左到右,从上到下都是递增的,查找某个元素

第一题就是给一个矩阵,从右上角往左下角一层一层斜着遍历,类似于这样:
输入:
 1  2  3  4
 5  6  7  8
 9  10  11  12
 13  14  15  16
输出:
4 3 8 2 7 12 1 6 11 16 ...
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
给定2D矩阵,求里面1构成的正方形的最大面积。
给定一个数组,例如 [1,1,2,2,2,3,3,3,3]这样的,里面的数组不一定连续并且有序,假设我输入 2,这个2表示出现次数最高的两个
# 那么你需要给我返回 2,3

 

二叉树

n个节点的二叉树的高

求一棵完全二叉树的最底层的最右节点

第一道蛇形打印tree,给root node

输出二叉树的所有路径:https://leetcode-cn.com/problems/binary-tree-paths/

二叉树给定a节点到b节点的最大距离,感觉是dfs,具体没做出来,然后换了下面这道

如何求二叉树的最大宽度,感觉是bfs

遍历二叉树,将所有节点的数字做个轴对称变化,计算所有节点数字之和。(轴对称即反转数字)

不用递归实现二叉树镜像

对称二叉树判断

二叉树 某一层的节点个数(递归)

通过前中序遍历得出后序遍历

判断二叉树是否是完全二叉树

二叉树层次遍历,之字型遍历

说一下二叉搜索树如何转变为链表

树找两节点最长距离、找第一个值为k的数下标

N叉树前序遍历(我先写的递归方法,他说太简单了叫我写迭代方法,我就又写了迭代方法)

求第k大的树 各自的复杂度 不同场景怎么选

dfs:

给一个正整数,表示成一个或多个不同的正整数的和,输出所有的解决方案(深搜,但是我实现的时候写的不好)

有重复字符的字符串全排列

二叉树的最大路径和,除了给出和,还要给出路径....

字符串全排列

集合的子集

剑指offer上的正则匹配

先手写4皇后矩阵,然后问我怎么构造16皇后?无穷皇后呢?

在一个无穷棋盘,给定一个坐标(i,j),如何确定它是不是皇后?

用两个栈实现队列

给两个数组 判断第一个数组的元素经过入栈出栈后能不能变成第二个数组(注意这两个数组的元素也不保证相等)

给个数组,找出右边第一个比它大的元素

最大频率栈(困难)

单调栈, 第一个缺失的正数,水池

最小栈

一个无序数组,求左右任意两个元素的最大差值?遍历,用一个leftmax保存左侧最大元素,每次和当前元素做差即可

dp

- ​       **题目是:给定一个包含大写英文字母和数字的句子,找出这个句子所包含的最大的十六进制整数,返回这个整数的值。数据保证该整数在int表示范围内。**             
- ​       样例:输入:012345BZ16 输出:1193051 说明:12345B对应的十进制为1193051             

2N的格子 12的格子填满它有多少种方法, 给个数组,找出右边第一个比它大的元素, 链表两两反转

掷骰子走路,1~6,给定的输入n,走到第n个格子有多少种走法

青蛙跳格子,数组里元素表示该位置石头个数,每次跳3-5格,问跳出数组最少踩多少石头。(跳跃游戏)

打家劫舍三变种

数组扁平化,要求可以实现只扁平一层

动态规划(01背包)

手撕最长有效括号数

一个射击运动员打靶,靶一共有10环,打10枪打中90环的可能性有多少种?(两种方法:递归、动态规划) 要先写出递归表达式、动态规划状态转移方程

给定字符串123456789,在其中进行插入+或-,使他的表达式值为50,求其方法数

其他:

实现atoi(要考虑错误怎么处理,溢出,非法字符串,空格,正负号等等)

快速求三个

阶乘运算(数据范围超过long 怎么解决) 有序数据的交集。

对于给定的数据,找出比这个数大的最小回文数(正反读都一样的数),如 12310 -> 12321

Leetcode 4 

T62不同的路径

. Leetcode124

leetcode1024

leetcode 438

实现一个函数a(),第一次调用输出0,再调用输出1,再调用又是0。再调又是1

打印1~n的质数

前k大的数,用堆和快排做,问复杂度

.两数之和小于指定target的所有不同数组下标的数对(不是求个数),O(nlogn)

两个代表整型数的字符串相加(超过long)

基本计算器(加减乘除,没括号,十分钟),刚刚命中弱点,没撕出来

给一个01二项分布的随机器,参数为p,用它设计一个0-1的均匀分布的随机器(连续的)

rand5实现rand7

1~N,其中有两个数重复,找出重复的数?

小于n的字典序排列的第k个数字

寻找32位数字中第一位为1的位置

在一个无序的数组中,如果一个数大于另一个数的2倍,则两数为一对,找到数组中最多几对这样的数。

面试官最后提示分两半,遍历其中一半,剩下一半有序数组使用二分查找最接近2倍值,时间复杂度O(nlogn)

开根号的算法题,只能用加减乘除做该怎么做(一点没思路,说了用二分查找),除了二分查找还有什么更好的办法吗

矩形覆盖;

删除无效括号;

一个周期性符号翻转的绝对值递增的数列,求前N项和(直接用等差数列公式)

给定m和n,输出从1~n中任意多个数字,且和为mu的组合(数字不能重复使用)

数学题:

已知100个数字组成的数组,抽去所有奇数后重新排序,再抽去所有奇数后重新排序,最后剩下的那个元素是最开始的数组的几号?

判断一个整数是否是2的指数(转换成二进制中1的个数)

实现根号,要求最终与目标值的精度不大于0.0001

怎么判断两个线段相交?(叉积)

54张牌,三人斗地主,问一个人同时拥有大小王的概率(注:地主有20张牌)

求开根号n的值

智力题

一个检测试剂10分钟检测一位病人,工厂有1000人,最少多少支试剂能10分钟内检测出来哪一位患病?讲出原理(小猪喝水问题的变种, 每一个试剂能携带两个比特位,相当于二进制中的一位,所以只需要10支即可.因为2^10 = 1024.具体检测方法就是每支试剂检测对应比特位为1的所有病人,最后能确定哪些比特位是1,哪些是0,就能确定唯一编号了)

4瓶药称重找过期偏重的一瓶,最少几次 。 8瓶呢?

1000瓶水,1瓶有毒,最少要多少只老鼠才能试出这瓶水

做道题,我有一副牌,第一步,从牌顶拿一张放在桌子上,第二步,将当前牌顶的牌取出来放到牌的最底部,重复1 2两步,最终得到一个 有序的 数组(1 2 3 4 5 6 7 8 9),问 这副牌最初的顺序是怎么样的

翻硬币;

50个红球50个白球,放到两个容器里,怎么放令拿出红球的概率最大

概率题,54张牌,分三堆,大小王在同一堆的概率

两人抛硬币,A先手,谁抛硬币到正面就赢了,问谁赢的概率大,概率是多少

1-100,报号,每次剔除奇数位置的人,问这样剔除以后最后剩下的是几号?64

(求第n个丑数,leetcode原题,难度mid)

A、B两人掷硬币,A先掷, 先掷出正面的获胜,求A, B胜率

100个球 两个人每个个人最少拿1个 最多拿5个 怎么拿保证一定赢

飞机上有100个座位,有100个人按顺序上飞机,他们选座位的规则如下:a)如果自己的位置没有被坐,那么坐自己序号对应的位置;b)如果被坐了就随便坐。已知第一个人喝醉了随便坐,其他人正常,求第100个人坐到第100个位置的概率;

两个人取石头 每次最少1个,最多a个,共有n个 有必胜策略吗

场景题:

有A B C D 4个候选广告,2个广告展示位。写一个广告推荐程序,每一次选择2个不同的广告去展示。要求多次推荐后,A B C D推荐次数出现的比例趋近4:3:2:1。广告越随机越好。

场景题。一篇论文 里面有很多英文单词,我已经统计出每个单词的频次,请根据空间和查找效率的特点,选择合适的数据结构建立查找

实现一个队列,要求没有数据的时候等待,put数据之后唤醒,条件变量忘了咋写了(gg)

2000w高考成绩(有大量相同数据),无内存限制,要求O(n)时间复杂度排序 当时说用桶排序,只要同桶的数量趋近于高考人数,就可以做到O(n),事后才想到可以用Trie树,有点可惜

1、类似于并查集的问题,最终求连通分量的数量

设计一个list,让100w数据量实现rpush、rpop、lpush、lpop、index5种操作,要求每种操作时间复杂度为o(1)?

快速找出所有微信关系里的单向好友

设计一个消息队列

已知一天内用户登录登出的日志(数据量较大),,求这一天用户在线人数的最大峰值和该最大峰值的持续时间段(时间段用开始时间结束时间的闭区间表示), 日志包含字段(userid, login_time, logout_time)

集合有很多个短整数对,说一个数据结构使得其有序,给出插入,更新和删除的复杂度

实现一个随机负载均衡算法,按照机器给定的概率每次返回2个不同的机器编号。
输入:一个机器编号列表,以及对应机器被挑选的权重
输出:两个不同的机器编号
举例:
输入 (1,2,3,4)  (20, 35, 25, 20)
跑10000次,统计每个机器编号出现的次数,应该要符合对应的概率比

 

基础数据结构以及stl的考察

我桶排序的时间复杂度是多少,为什么,怎么算的 插入排序,希尔排序的实现,归并排序的实现和空间复杂度

问优先级队列,堆排序,复杂度,为什么,怎么算

学生成绩排序(外排序)作者:✨凛冬
就是给你2000万个学生成绩,不能一次装载在内存中,进行学生成绩的排序。差不多是这个意思:https://wizardforcel.gitbooks.io/the-art-of-programming-by-july/content/06.04.html

对于一个部分有序的数组,选择什么排序方式比较合适?为什么?

 

vector是线程安全的吗?你多线程怎么设计?

shared_ptr 和unordered_map 是线程安全的吗?

如果让你实现一个hashmap,怎么做。数组加链表。

stl 里面有哪些排序函数,sort是稳定的吗,stl稳定的排序函数有哪些?

deque的扩容机制,map/set的实现。

STL的迭代器是什么,迭代器会不会失效,在什么情况下会失效?STL里有哪些数据结构可能会迭代器失效?讲一下deque扩容细节?

使用stl报错不直观,你一般是如何调试的(懵逼)

对于平衡二叉树的了解;为什么深度不超过1,而不是2或者3

. 说一下KMP算法

数据结构相关

红黑树是平衡搜索树吗?红黑树最差的性能怎么样?

map和unorder_map区别:以及使用场景(RB-tree和hash table的应用场景、确点) 哪个内存利用率高

vector push_back 迭代器是否失效

对比了红黑树、和二叉搜索树以及平衡树)

讲讲STL,vector的底层实现,写个sort排序中的仿函数;

.随便说一种常用的数据结构的特点(选的数组),连续存放的内存有什么好处?操作系统层面有什么好处?如何提高cache命中率?

map的底层实现原理,键是怎么实现的(不会),键的存储结构是什么(猜了个数组)

如何存储一个图?图的遍历算法(广度深度)(好久没接触过图了真的记不清了)

联通块个数

拓扑排序

修完课程需要至少几个学期,每个课程需要一个学期修完且必须在前面的学期修完它的先行课
{
    1 -> []
    2 ->[]
    3 -> [1,2]
    4 -> [1]
    5- > [1,3,4]
    6 -> [5]
}
1~6的先行课如上,返回结果[[1,2][3,4][5][6]]

然后是最小生成树,如何实现,布鲁斯科儿算法

求一个微服务系统中进行一次服务调用的最长时间,就是lc里的课程表二,是一个图的遍历问题

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值