您的位置:首页 > 职场人生

剑指offer读书笔记:第二章,面试基本知识02

2018-03-08 20:47 267 查看

问题1 有序矩阵+右上角查找



方法有二

暴力查找

右上角查找

问题变形:寻找第k小的数据

方法有二

- 暴力遍历然后排序

- 右上角查找+二分查找

参考这个链接leetcode 668. Kth Smallest Number in Multiplication Table 有序矩阵搜索 + 右上角二分搜索

问题02 字符串地址



str1和str2会自动分配空间,所以地址是不同的

但是str3和str4其实是相同的

—->写时复制

—->Java的StringBuilder StringBuffer String

在这方面运行速度快慢为:StringBuilder > StringBuffer > String

String为字符串常量,而StringBuilder和StringBuffer均为字符串变量;

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

问题03 替换空格



方法有二

直接暴力移动替换,复杂度O(n*n)

O(n),先扫描空格数量计算替换后的字符串数量,然后遍历替换,省去了字符串的移动。注意要从后向前遍历

如下图:



—-》合并k个有序的数组

依次合并会超时,很费时间;

应该折半两两合并,知道得到最后结果

问题04 从尾到头打印链表



方法有二

DFS深度优先遍历

使用栈

问题05 构建二叉树



直接参考这个博客leetcode 297. Serialize and Deserialize Binary Tree 二叉树的序列化和反序列化 + 深度优先遍历DFS

问题06 两个栈实现一个队列



进队时,压入stk1。

出队时,stk2弹出。

stk2为空时,stk1倒入stk2。两次逆序恢复了原序。

参考这个博客leetcode 232. Implement Queue using Stacks 双栈实现队列

1)取栈顶元素: 返回有元素的队列的首元素

2)判栈空:若队列a和b均为空则栈空

3)入栈:a队列当前有元素,b为空(倒过来也一样)则将需要入栈的元素先放b中,然后将a中的元素依次出列并入列倒b中。(保证有一个队列是空的)

4)出栈:将有元素的队列出列即可。

参考这个博客leetcode 225. Implement Stack using Queues 双队列实现栈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: