Ruby面试题

Python013

Ruby面试题,第1张

下面是对 Rails Interview Questions 中的

Ruby 部分的解答:

从上面可以看出,其实Proc和lambda都是 Proc 对象。

首先我们来回答第一问:怎么通过某个字段来对对象数组排序?

假设我们有一个对象数组 @users ,我们需要让他对字段 name 排序,则我们可以:

如果是在 ActiveRecord 中,则我们只需:

下面列举我喜欢的几个常用的gems及它的可替代备选方案

首先我们说明一下递归(recursive)和迭代(iterative):

递归 :一个树结构,每个分支都探究到最远,发现无法继续走的时候往回走,每个节点只会访问一次。

迭代 :一个环结构,每次迭代都是一个圈,不会落掉其中的每一步,然后不断循环每个节点都会被循环访问。

由此我们可以看出 ruby 中更加常用的选择是 迭代 ,就像 .each , .times , .map 等都是迭代循环的形式。

ruby之父,松本行弘,日本人

于 2015-03-20

大公司面试的算法题目多半也是仿照行业经典题库出的,还有的也是结合自己公司业务中的实际情况,用几个特别的案例形式筛选出自己想要的人才。可以去下载一下谷歌微软的经典题库多多复习,还可以到各大公司的论坛贴吧群去看一下笔试和面试经验。

下面简单列举一些经典算法题:

1.判断一个字符串中的字符是否唯一

2.字符串翻转

3.去除字符串中重复字符

4.利用已知函数判断字符串是否为另一字符串的子串

5. 从链表中移除重复结点

6.实现一个算法从一个单链表中返回倒数第n个元素

7. 给定链表中间某结点指针,删除链表中该结点

8.求由两个链表结点组成的数之和

9. 给定一个循环链表,实现一个算法返回这个环的开始结点

10 如何只用一个数组实现三个栈

11. 实现一个栈,要求实现min函数以返回栈中的最小值

12.实现数据结构SetOfStacks来模拟叠盘子

13. 编程解决汉诺塔问题

14.使用两个栈实现一个队列

15. 写程序将一个栈按升序排序

16. 用一个函数判断一棵树是否平衡

17. 设计算法判断有向图两结点间是否存在路径

18. 将递增数组构建成一颗最小高度二叉树

19.将二叉树每一层结点构建成一个链表

20. 查找二叉查找树的任意给定结点的“下一个”结点

21.找出一棵二叉树中两个结点的第一个共同祖先结点

22. 判断一棵二叉树是否为另一棵二叉树的子树

23.输出二叉树中路径上结点值之和为给定值的所有路径

24.写程序使整数N中第i位到第j位的值与整数M中的相同

25.给定一个字符串类型表示的小数,输出其二进制表示

26. 给定一个整数x,找出另外两个二进制表示中1的个数和x相同的数

27.解释以下代码的作用:((n &(n-1)) == 0)

28. 交换一个整数二进制表示中的奇数位和偶数位

29. 写程序找出丢失的整数,要求时间复杂度O(n)

30. 为通用卡牌游戏设计数据结构,并设计子类

我们可以把每一类的题目都细细研究,触类旁通,只有掌握了基础的知识才能慢慢解决复杂问题。

给定一个数组arr长度为N,你可以把任意长度大于0且小于N的前缀作为左部分,剩下的作为右部分。

但是每种划分下都有左部分的最大值和右部分的最大值

请返回最大的, 左部分最大值减去右部分最大值的绝对值

算法流程

我们要求左边最大减去右边最大,max肯定是在左边数组和右边数组中的最后参与决策的最大数。

假设12在左边数组中,右边数组剩下[5,6,7]

因为把max放入了左边的数组,所以, 我们需要右边数组的最大值尽可能的小 ,数组个数越少,他的最大值就是尽可能的小,比如剩下[5,6,7]的情况,我们可以看到我们区arr[N-1]这个数作为右侧数组,是最满足 左部分最大值减去右部分最大值的绝对值 条件的。

同理 把max划分到右侧数组,左侧数组a[0]划分是最符合条件的。