首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【图解】记一次手撕算法面试:字节跳动面试官把我四连击了

来源微信公众号:苦逼码农 作者:帅地 字节跳动这家公司,应该是所有秋招公司中,对算法最重视一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到几个算法题,并且每个算法题我都详细着给出了最优解...这里我稍微说以下过程吧,步骤如下: 1、在遍历字符串过程中,遇到 "(" 就让入栈,遇到 ")" 就判断下栈里面有没有 "(" ,分以下两种情况: (1)、如果有,则把处于栈顶 "(" 弹出,相当于和...")" 进行匹配,然后继续往后遍历字符串 (2)、如果没有,则匹配失败。...4、最后一击 我以为我给出这个解法算是可以了,面试官应该换一道题了,然后,面试官又来了一句:还能再优化吗?。这个时候我陷入了沉思……....当遍历完字符串,我们是否就得到最大长度有效括号了呢?大家可以想一下 答是不可以,我们还需要从右到左遍历计算一下。 为什么呢?

38420

【图解】记一次手撕算法面试:字节跳动面试官把我四连击了

作者:帅地 字节跳动这家公司,应该是所有秋招公司中,对算法最重视一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时面试场景...这里我稍微说以下过程吧,步骤如下: 1、在遍历字符串过程中,遇到 "(" 就让入栈,遇到 ")" 就判断下栈里面有没有 "(" ,分以下两种情况: (1)、如果有,则把处于栈顶 "(" 弹出,相当于和...")" 进行匹配,然后继续往后遍历字符串 (2)、如果没有,则匹配失败。...4、最后一击 我以为我给出这个解法算是可以了,面试官应该换一道题了,然后,面试官又来了一句:还能再优化吗?。这个时候我陷入了沉思……....当遍历完字符串,我们是否就得到最大长度有效括号了呢?大家可以想一下 答是不可以,我们还需要从右到左遍历计算一下。 为什么呢?

41330
您找到你想要的搜索结果了吗?
是的
没有找到

【图解】记一次手撕算法面试:字节跳动面试官把我四连击了

来源微信公众号:苦逼码农 作者:帅地 字节跳动这家公司,应该是所有秋招公司中,对算法最重视一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到几个算法题,并且每个算法题我都详细着给出了最优解...这里我稍微说以下过程吧,步骤如下: 1、在遍历字符串过程中,遇到 "(" 就让入栈,遇到 ")" 就判断下栈里面有没有 "(" ,分以下两种情况: (1)、如果有,则把处于栈顶 "(" 弹出,相当于和...")" 进行匹配,然后继续往后遍历字符串 (2)、如果没有,则匹配失败。...4、最后一击 我以为我给出这个解法算是可以了,面试官应该换一道题了,然后,面试官又来了一句:还能再优化吗?。这个时候我陷入了沉思……....当遍历完字符串,我们是否就得到最大长度有效括号了呢?大家可以想一下 答是不可以,我们还需要从右到左遍历计算一下。 为什么呢?

73320

PHP 代码混淆处理思路

昨天在一个 PHP 群里看到一个图片,图片如下: ? 看到这个图片,我觉得这应该是某个收费项目的源码,收费项目为什么还要提供源码,这就是 PHP 问题之一吧。...这类代码我没怎么见过,针对上面那个图片,我没有拿到源文件,只有这个图片。针对这个图片,我给出一个处理思路,和大家进行交流。 说说我思路 说说如果是我处理的话,我处理思路吧。...我们可以从代码中有明显特征位置开始还原,什么是明显特征?看下图。 ? 图中是一个 date() 函数,这个函数我们每个人都会用,参数是字符串。...代码写了不到 200 行,还原差不多 20 多行代码。可以说是有进展为什么没有全部还原呢?...给出关键代码结构,完整源码就不提供了(具体处理我删掉了),我自己都没有写完,而且也不算复杂。 <?

1.7K40

Python中浮点数和小数

了解decimal类型最佳资料,就是官方文档:https://docs.python.org/3/library/decimal.html。...浮点数会给出你所声明数字近似值。例如,如果输出是带有18位小数0.1,我实际上得到不是0.1,而是一个近似值。...,根据你数学知识,肯定会认为上面第一个表达式应该返回True,然而,一定要注意,浮点数是你所创建数字近似值——只不过有时候近似的程度很高,以至于没有差别。...看看每个小数,你就知道为什么了。...所有小数都应该使用字符串创建,以防止精度问题。否则,我们就会失去小数精度优势,并产生微妙错误。 总结 decimal类型,能够让计算更精确,虽然要损失点性能。这就看你需要什么了。

1.7K10

C#反射特性

但是这里却仅用Obsolete来标记方法,这是.Net一个约定,所有的特性应该均以Attribute来结尾,在为对象标记特性时如果没有添加Attribute,编译器会自动寻找带有Attribute版本...这里应该记得“元元数据”也是一个特性,大多数情况下,我们只需要掌握 AttributeUsage就可以了,所以现在就研究一下。...这里大家一定疑惑为什么会这样划分参数,这和特性使用是相关。...假设现在我们RecordAttribute已经OK了,则使用应该是这样: [Record("创建", "Amy", "2013-3-10","创建Test")] public class...All = 32767, }  现在应该不难理解为什么上面我范例中用是: [AttributeUsage(AttributeTargets.Class, AllowMutiple=true,

82340

这次让我们从字节码文件来重新认识String,文末有两个小小面试题,一起来试一试

我想对于String这个类,没有谁对陌生吧。可以说是无论在哪个项目中都是可以用到。 那么反问一下你,你确定你对于String已经是真的了解了吗?你是否清楚String内存分配?...我电脑中暂时只有这几个版本,之后有空了会全部验证,大家也可以给出建议 1.2、大家想一想为什么会作出这样改变勒?...从许多不同应用程序收集数据表明,字符串是堆使用主要组成部分,而且,大多数字符串对象只包含拉丁字符1。这些字符只需要一个字节存储空间,因此这些字符串对象内部字符数组中有一半空间没有使用。...这纯粹是一个实现变化,没有对现有公共接口更改。 没有计划添加任何新公共API或其他接口。‍...4、通过字面量方式(区别于new)给一个字符串赋值,此时字符串值声明在字符串常量池中。 小结:通过上面几个小点,我想大家应该对这个是明白了吧。也能算证明了String不可变性了吧。

29730

Python内置函数详解【翻译自pyth

如果给出了flags参数且没有给出dont_inherit参数(或者为0),除了本该使用future语句之外,由flags参数指明future语句也会影响编译。...如果参数是一个字符串应该包含一个十进制数,可选地前面有一个符号,并且可选地嵌入在空格中。可选sign可以是'+'或'–'; '+'符号对生成没有影响。...对于一般Python对象x,float(x)委托给x .__float__()。 如果没有给出参数,则返回0.0。...如果newline是任何其他合法值,写入任何'\n'字符都将转换为给定字符串。 如果closefd是False并且给出了文件描述器而不是文件名,则当文件关闭时,基本文件描述器将保持打开。...使用单个可迭代参数,返回1元组迭代器。没有参数,返回一个空迭代器。

1.5K20

你并不了解 String (二)

第一反应就是 “我代码肯定没错,应该是他写错了” ,就加了这兄弟微信,截图给我看了看代码。然后我就蒙了,果然是 false。同样代码,却是不同执行结果。...intern() 的话,此时就有两种情况: 字符串常量池中没有 java 字符串引用 字符串常量池中已经有了 java 字符串引用 第一种情况,就是我上篇文章中分析,str1 驻留到字符串常量池,...String str2 = "java"; 一执行,str2 等于字符串常量池中 java 对应引用。而 str1 是新建在堆中 java 字符串引用,自然而然,比较结果是 false。...但是为什么同样在 main() 方法中直接执行这几行代码,结果会不一样呢?为什么 main() 方法中代码还没有执行,字符串常量池中就已经有 java 字符串引用了呢? 对啊,为什么会这样呢?...看到这里,你应该明白了,在 JVM 启动过程中,字符串常量池已经在发挥作用了,在 main() 方法运行之前,一些字符串引用已经驻留在字符串常量池,比如上面的 java,但也不是百分之百,我手里

27030

比较字符串

比较两个字符串A和B,确定A中是否包含B中所有的字符。...字符串A和B中字符都是 大写字母 样例 给出 A = "ABCD" B = "ACD",返回 true 给出 A = "ABCD" B = "AABC", 返回 false给出一个错误思路...A中同一个元素,同时统计找到字母个数,如果全部能找到,这个个数应该是等于B.size()),乍一想这个思路还不错,其实有一个致命错误,先看代码: bool compareStrings(string...思路2:后来想到用map来做这个是有点可以:把两个字符串分别放入两个map里,会自动排序好,int保存各自出现次数,然后再比较两个map对应位置出现次数多少就可以了,后来发现...思路3:后来再想了想,又想回去思路1中了,发现自己陷入一个自己挖坑里,如果要保证重复搜寻的时候不搜到上次字符,我们为什么不把这个字符去掉或者换掉呢?

1.2K10

python 基础内置函数表及简单介绍

__float__() >>>如果没有给出参数,则返回 0.0。...int class int(x=0) class int(x, base=10) 返回一个由数字或字符串 x 构造整数对象,如果没有给出参数,则返回 0。如果 x 不是数字,则返回 x....如果提供了一个位置参数,应该是一个 iterable。iterable 中最小项被返回。如果提供两个或多个位置参数,则返回最小位置参数。 有两个可选关键字参数。...(如果给出文件描述符,则在返回 I/O 对象关闭时关闭,除非 closefd 设置为 False。) mode 是一个可选字符串,用于指定打开文件模式。...sep 和 end 都必须是字符串;它们也可以是 None,这意味着使用默认值。如果没有给出对象,print() 将只写入 end。

1.3K20

93.精读《syntax-parser 源码》

引言 syntax-parser 是一个 JS 版语法解析器生成器,具有分词、语法树解析能力。 通过两个例子介绍功能。...因为同一时间 TreeNode 节点只有一个分支生效,所以没有子元素了 } } ); 可以看到 visitChildNode 与 visitNextNodeFromParent 函数都只处理好了自己事情...输入推荐,就是给定字符串与光标位置,给出光标后期待内容功能。...举个例子: select | from b; | 是光标位置,此时语句内容是 select from b; 显然是错误,但光标位置应该给出提示,给出提示就需要正确解析语法树,所以对于提示功能,我们需要将光标位置考虑进去一起解析...集收集完毕后,,就会触发父节点 First 集收集判断,如此递归,最后完成 First 集收集是最顶级节点。

60620

java中那些让你傻傻分不清楚小细节

如果想把所有的A都替换成B,很显然可以用replaceAll方法,因为非常直观,光从方法名就能猜出用途。 那么问题来了:replace方法会替换所有匹配字符吗? jdk官方给出了答案。 ?...答案:是false。 有些同学可能会反驳,Integer中不是有范围是:-128-127缓存吗? 为什么false? 先看看Integer构造方法: ? 其实并没有用到缓存。...一般情况下,拼接字符串时我们推荐使用StringBuilder,通过append方法追加字符串只会产生一个对象,而且没有加锁,效率较高。...5. isEmpty和isBlank区别 我们在对字符串进行操作时候,需要经常判断该字符串是否为空。如果没有借助任何工具,我们一般是这样判断: if (null !...答案是否定为什么呢? jdk官方说了不存在情况会返回-1 ? indexOf方法返回是指定元素在字符串位置,从0开始。

56231

知识图谱这么火,本文带你揭秘前世今生!

本文转载自SimmerChan知乎专栏《知识图谱-给AI装个大脑》中文章《为什么需要知识图谱?什么是知识图谱?——KG前世今生》,作者已同意本公众号转载该专栏文章。 为什么需要知识图谱?...Google知识图谱宣传语“things not strings”给出了知识图谱精髓,即,不要无意义字符串,而是获取字符串背后隐含对象或事物。...举这个例子也是为了表明,知识图谱这样一种概念、或者技术,诞生是符合计算机科学、互联网发展潮流。关于知识图谱更多应用,会在之后另一篇文章中给出。...目前,知识图谱并没有一个标准定义(gold standard definition)。...现在读者应该知道为什么我会说之前那幅图不准确,并会误导大家对知识图谱理解了吧。"

52110

后端技术:Java编程中忽略这些细节,Bug肯定少不了

(a.equals(b));//true 字符串a和b字面值都为"java",用a == b判断则输出false,即不相等,而a.equals(b)则输出true,即相等。...这是为什么呢?...3 大量垃圾回收,效率低下 字符串拼接操作,是非常高频操作,但是如果涉及拼接量很大,则如果直接用 + 符号进行字符串拼接,则效率非常低下,程序运行速度很慢。...究其原因,就是因为Java语言中字符串类型是不可变,因此 + 操作后会创建一个新字符串,这样会涉及到大量对象创建工作,也涉及到垃圾回收机制介入,因此非常耗时。...hatIterator.remove(); } } System.out.println(lists);//[csharp, fsharp] } 5 null引用 在方法中,首先应该对参数合法性进行验证

27110

Python 为什么会有个奇怪“...”对象?

在写上一篇《Python 为什么要有 pass 语句?》时,我想到一种特别的写法,很多人会把当成 pass 语句替代。在文章发布后,果然有三条留言提及了。...关于这个对象基础性质,下面给出了一张截图,你们应该能明白我意思: ? “...“并不神秘,只是一个可能不多见符号型对象而已。...但是“...”这个常量似乎受到了特殊对待,我 IDE 上没有作提示。 很多人已经习惯上把当成 pass 那样空操作来用了(在最早引入邮件组讨论中,就是举了这种用法例子)。...文档中没有给出具体实现例子,但用它结合__getitem__() 和 slice() 内置函数,可以实现类似于 [1, ..., 7] 取出 7 个数字切片片段效果。...无限循环是无法穷尽地表示出来,Python 中用 ... 来表示,比较形象易懂,除了,恐怕没有更好选择。 最后,我们来总结一下本文内容: ...

2K10

这 11 个前端小知识你不一定知道

为什么?这是因为,当我们调用不带参数 sort 方法时,JavaScript 会将数组元素转换为字符串,然后按字母顺序排序,疯狂吧?...虽然我用了很长时间来学习解构,但从来没有这样想过。 05、Trim 函数 在许多编程语言中,我们在字符串上有一个修剪方法,可以删除字符串任何空格。...07、isNaN 函数 isNaN 再次成为 JavaScript 中最常用方法之一。检查给定参数是否是数字。但它对于空字符串和填充字符串行为不同。见下文。...,因此返回 false。...但是,在第 2 行,JavaScript 将空字符串视为 0,这是一个数字,因此无法通过 NaN 测试。 第 3 行也应该清楚,因为“a”是一个字符串,因此不是数字。

94020
领券