我太菜了

喜欢写Hello World的未来程序员.

32. Longest Valid Parentheses

你快乐吗

浮云出处元无定 得似浮云也自由 C++,dp,字符串。这道题也有不用dp的解法,但是这种奇技淫巧并不通用,到面试的时候很难想起来,还是老老实实把dp理解好,能够解很多题目。 本题目如果用动态规划,重点是把括号匹配的关系理清楚: (在前,)在后 如果(和)之间是(...)且(...)是有效括号序列,那么...一定由0到多个不定长度的有效括号序列组成 理清括号匹...

C/C++读取elf文件的头部

你快乐吗

鸳鸯被里成双夜 一树梨花压海棠 从libelfin的例子和网上各种资料我也没找到怎么读取elf文件的头部,非常懵逼呀! 其实有种很简单的方法: 不过这是从命令行获取的,肯定是不够的,实际上elf可执行文件/共享库文件都可以当成二进制文件读取。 关于共享库文件和可执行文件 在GCC/G++低版本和CLANG编译的可执行elf文件,其实都是EXEC类型的,其实就是上图...

23. Merge k Sorted Lists

你快乐吗

刀背我藏身 世路风波君自珍 C++,最小堆,链表排序。 这道题做了挺久的,主要是因为堆的实现都忘了,向上调整,向下调整。当然写起来代码也是挺长的,很复杂。这里我为了复习堆的实现,是直接写了一个MHeap类。 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), ne...

10. Regular Expression Matching

你快乐吗

C++,dp,递归,字符串匹配。 像这种题,最容易忘记,索性思路写的详细一点。 大体思路:使用从前往后“消除”的思路,使用双指针,对于指针之前的可以不管,只判断当前位置和以后的字符串的匹配情况,然后使用相同的策略进行递归匹配。 详细匹配步骤: 如果s和p指针都指向\0,则说明已经全部匹配成功了; 如果s和p指针指向的字符相等或者是p指向的是.,说明当前字符匹配成功: ...

使用libelfin库通过dwarf信息读取行号

profile

金杯侧 插向绿云鬓 便随王母仙 在之前的一篇博客elf文件和读取elf信息中已经讲到,elf文件中的.debug_line段,存储的是汇编指令地址到文件名+行号的映射。 dwarf是一种调试格式,可以通过解析这种格式获得很多的调试信息,这里的汇编指令对应的源代码位置就是一种调试信息。 其实能够介绍的不是很多,关于dwarf,读者可以自行百度/谷歌查询,也可以直接查看...

读取动态库符号表以及指令地址转化

profile

为众人抱薪者 已冻毙于风雪 获取可执行文件的符号表 获取可执行文件的符号表其实还是比较简单的,直接用libelfin的接口读取就行了,当然也可以用libelf库,也不是很难,这里我都会演示一下的,并和readelf读取的进行对比。 使用libelfin读取符号表 libelfin的接口设计很人性化,为什么这么说呢?两个原因。 现代C++11写的,比较简洁,考虑的...

4. Median of Two Sorted Arrays

你快乐吗

染得道家衣 淡妆梳洗时 晓来清露滴 C++,二分,这道题我看到复杂度要求就知道是二分了,但是依然想了很久才知道大概的理论,然后代码实践又是一个下午。。。菜得真实。 本题的理论就是在短序列A1中找到一个分界下标点m1,其满足如下条件(短长序列长度分别为len1, len2): 可以在短序列A2找到一个唯一的m2,满足: 如果(len1 + ...

leetcode easy 题集合

你快乐吗

20. Valid Parentheses 这个题就是直接用栈,然后配对就好了,判断是否能配对,asii码相差小于等于2的就是配对符号。 class Solution { public: bool isValid(string s) { stack<char> st; for (const char &it : s) { ...

739. Daily Temperatures

你快乐吗

终是圣明天子事 景阳宫井又何人 C++,算是动态规划23333,也是看了评论区大神的思路。 其实很容易想到一个O(N\^2)的方法,就是从后往前遍历,对于每个T[i],再往后找到第一个大于T[i]的数,设其为T[j],显然找T[j]的过程复杂度也是O(N),所以总的复杂度就是O(N\^2)了。 热评解法就是利用了一个很重要的信息,来优化找T[j]的过程。 原来我们找找T...

647. Palindromic Substrings

你快乐吗

近水楼台先得月 向阳花木易为春 因为个肺炎疫情,在家待了半个月了,准备开始继续刷题了,打了一周的只狼,打铁的感觉真不错23333。 说回到这道题,C++,动态规划。 回文串的题,用dp来解就是最简单和最容易理解的套路。 定义一个动态数组dp,dp[i][j]表示下标从i到j组成的子串是不是回文串,我们直接两层循环,遍历dp数组的所有值,如果s[i] == s[j]成立,...