讨论/面试考题/字节面试算法/
字节面试算法

1.输入1234 输出 1243,从新排列,找出比1234大的第一个数。再比如1324 输出,1342
2.判断二叉搜索树
一个都没做出来,太难受了

展开讨论
追求简单的小幸福发起于 2020-04-29
共 17 个讨论

这道题我印象还挺深刻,刚刚去查了一下。
第一题是LeetCode556,关键是要明白如何找到下一个更大的数,可以先做496题,体会单调栈的作用。
第二题是LeetCode98,实在没有思路的话,把中序遍历求出来,然后判断是否有序就好了。

10

第一题:
要比原来数字大,并且是接下来的第一个,那么自然想到先从低位开始交换数字的位置数值的变化小;那么现在问题就是如何找到大的那一个?
假设现有一个数为 abcd,那么从最低位 d 开始,依次与其高位 c b a 比较;如果 d 小或相同,此时d与之交换后得到数小于等于原数,不交换;如果 d 大,那么即可交换,并输出,因为其余低于此位的其它数都小于等于 d,他们与当前数交换后值均小于原值。如果在最低位 d 没发生交换,继续在次低位重复该过程。若直到最高位均未发生替换,那么此时值已经最大。

第二题:
深度优先搜索验证整棵树的每个节点是否符合二叉搜索树的定义,即左叶>当前节点>右叶或左叶<当前节点<右叶。

4

真的好巧,你的第一题和我 2018 年社招面试抖音的第一题是一样的,你可以看看我当时的面经:desgard.com

第二题直接 DFS 一下就好了~

没事总结经验,半年再战,期待同事 💪

1

显然你基础不牢,两道leetcode中等原题,第一个叫下一个排列吧

第一题backtrack 第二题递归

第二个 Leetcode 有原题“验证二叉搜索树”

第一题应该是个贪心,
如果要比原数字大,那么新数字一定是高x位(x>=0)与原数字相同,而第 x+1 位比原数字大。而这一位一定与之后的某一位发生了交换。为了让数字增大的幅度尽量小,贪心的思想是,这个位应当靠近数字的低位。

示例1:[1234]
从低位向高位枚举,发现 '3''4' 可交换,因此答案是 '1243'

示例2:[1432]
从低位向高位枚举,枚举到 '1',其可以与后面的 '2''3''4' 交换。这样,为了让最高位最小,最高位取 '2'。然后考虑次高位,让其最小,应该取 '1'. 依次类推,答案是 '2134'.

https://maimai.cn/contact/share/card?u=ktufqwz9zopi

一手面试资料(问法,风格,面试题目方向),面试流程(可以推动,push),HR面试雷区避免

1、互联网BAT TMD技术岗招聘;【微信同手机17341407661】

2、招聘JAVA岗位(互联网分布式系统架构设计、多线程、高并发、高可用、高扩展、JVM虚拟机、分布式缓存中间件、源码);

3、招聘大数据(hadoop、spark、Python、BI、ETL、离时、实时、SQL数据治理);

4、算法(搜索、推荐、数据挖掘、NLP自然语言、文本挖掘、知识图谱、深度学习、机器学习、视觉算法);

5、其他技术栈如C、C++、PHP、测试开发、前端、云计算;

两个都是leetcode原题…,加油!

第一题 从最末一位倒着找到一个比后面某一个数大的数,然后交换

第二题挺简单,普通的中序遍历,看上一个值如果大于等于当前值,直接返回false