指针被誉为“C语言的灵魂”。C语言之所以强大,很大一部分原因在于其灵活的指针运用。在这篇文章中,我就对C/C++中指针这一重要的语言特性进行简要的总结。
巩固基础:二叉树的遍历
我们在数据结构的学习中,都接触过二叉树。二叉树常用的遍历方法包括:前序遍历、中序遍历、后序遍历以及层次遍历。其中前三种遍历方法均可以通过递归或者迭代实现。递归实现难度较小,而且写出来的代码简洁明了;迭代实现起来则具有一定难度。在这篇文章中,我就来总结一下利用迭代遍历二叉树的方法。
C++中sizeof运算符的简要总结
sizeof
是C++中的一个运算符(不是一个函数),它的作用被表述为:The sizeof
keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t
. 简而言之,就是返回一个变量或类型在内存中所占的字节数。但正是这么一个看似简单的运算符,却成为了面试中的热门考点。这说明关于这个运算符其实有很多需要注意的地方。在这篇文章中,我就对这个运算符进行一个简要的总结。
面试问题赏析:求1到N的和
在面试中,我们可能会遇到一些“不走寻常路”的问题。这类问题看似简单,但是经常有许多奇葩的要求。比如我们之前讨论过的一个问题:输入两个int
类型的整数a
和b
,输出二者的和,要求不能使用四则运算符。最后我们得出的解决方法是利用位运算。今天我们再来讨论一道题目:输入一个int
类型的正整数n
,输出1
到n
的和,要求不能使用*
、/
、for
、while
、if
、else
、switch
、case
以及?:
等关键字或运算符。
hihoCoder题目赏析:并查集
并查集是一种非常精巧而实用的数据结构,它可以处理一些不相交集合的合并与查询问题。并查集的用途有求连通子图、求最小生成树(Kruskal算法)、求最近公共祖先等。本文就通过hihoCoder上的一道题目“无间道之并查集”,来介绍一下并查集这种数据结构。
hihoCoder题目赏析:状态压缩
本文来赏析hihoCoder上的一道题目“状态压缩”。我们知道,用动态规划解决问题的时候,状态的表示是很重要的一环。一般来讲,状态可以用一个数组来表示,但是对于有些问题,它们的状态中所包含的信息过多,如果要用数组表示的话,数组的维度会达到四维或以上,这时我们就需要使用状态压缩。状态压缩的核心思想是用二进制位来表示状态,用位运算来表示状态之间的转化。这样不仅减少了空间的消耗,而且提高了程序的效率。
hihoCoder题目赏析:刷油漆
本文来赏析hihoCoder上的一道题目“刷油漆”。为了解决这个题目,本文首先介绍了0-1背包和完全背包问题,它们在动态规划系列问题中是比较基础和典型的。然后本文在这两个问题的基础上,介绍了“刷油漆”问题的思路,并引入了一种名为“树形DP”的方法。
面试常见问题盘点:双指针
在关于数组的问题中,有那么一类问题,它们可以利用双指针(Two Pointers)方法解决。需要说明的一点是,这里提到的“指针”不一定指的是严格意义上的指针,在很多场合下,它被用来代指用来进行遍历的下标i
或j
。所以“双指针”问题其实就是利用两个下标i
和j
对数组进行遍历的一类问题。本文就来列举一部分面试中经常涉及到的“双指针”问题。