题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最…
分类:程序员面试题精选
程序员面试题精选100题(51)-顺时针打印矩阵[算法]
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如:如果输入如下矩阵: 1 &…
程序员面试题精选100题(57)-O(n)时间的排序[算法]
题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。 分析:排序是面试时经常被提及的一类题目,我们也熟悉其中很多种算法,诸如插入排序、归并排序、冒泡排序,快速…
程序员面试题精选100题(61)-数对之差的最大值[算法]
题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。 分析:看到这个题目,很多人的第…
程序员面试题精选100题(33)-在O(1)时间删除链表结点[数据结构]
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下: struct ListNode { int &n…
程序员面试题精选100题(09)-链表中倒数第k个结点[数据结构]
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下: struct ListNode{ int  …
程序员面试题精选100题(35)-两链表的第一个公共结点[数据结构]
题目:两个单向链表,找出它们的第一个公共结点。 链表的结点定义为: struct ListNode { int &nbs…
程序员面试题精选100题(14)-圆圈中最后剩下的数字[算法]
题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆…
程序员面试题精选100题(16)-O(logn)求Fibonacci数列[算法]
题目:定义Fibonacci数列如下: / 0 &n…
程序员面试题精选100题(23)-跳台阶问题[算法]
题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。 分析:这道题最近经常出现,包括MicroStrategy等比较重视算法的公司都曾先后选用过个这道题作为面试题或者笔…
程序员面试题精选100题(44)-数值的整数次方[算法]
题目:实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。 分析:这是一道看起来很简单的问题。可能有不少的人在看到题目后30秒写出如下…
程序员面试题精选100题(59)-字符串的组合[算法]
题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 分析:在本系列博客的第28题《字符串的排列》中,我们详细讨论了如何用递归的思路…