随笔分类 -  careercup

摘要:11.1 给定两个排序后的数组A和B,其中A的末端有足够的缓冲空间容纳B。编写一个方法,将B合并入A并排序。解法:已知数组A末端有足够的缓冲,不需要再分配额外空间。程序的处理逻辑很简单,就是逐一比较A和B中的元素,并顺序插入数组,直至耗尽A和B中的所有元素。这么做的唯一问题是,如果将元素插入数组A的... 阅读全文
posted @ 2014-12-09 13:04 Jessica程序猿 阅读(193) 评论(0) 推荐(0)
摘要:9.11 给定一个布尔表达式,由0、1、&、|和^等符号组成,以及一个想要的布尔结果result,实现一个函数,算出有几种括号的放法可使该表达式得出result值。解法:跟其他递归问题一样,此题的关键在于找出问题与子问题之间的关系。假设函数int f(expression,result)会返回所有值... 阅读全文
posted @ 2014-12-09 11:06 Jessica程序猿 阅读(326) 评论(0) 推荐(0)
摘要:9.10 给你一堆n个箱子,箱子宽w,高h,深d。箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。实现一个方法,搭出最高的一堆箱子,箱堆的高度为每个箱子高度的总和。解法:要解决此题,我们需要找到不同子问题之间的关系。假设我们又以下这些箱子:b1、b2,...,bn。能够堆... 阅读全文
posted @ 2014-12-08 16:16 Jessica程序猿 阅读(771) 评论(7) 推荐(0)
摘要:9.9 设计一种算法,打印八皇后在8*8棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。类似leetcode:N-Queens回溯法的实现代码:#include#include#includeusing names... 阅读全文
posted @ 2014-12-08 13:24 Jessica程序猿 阅读(262) 评论(0) 推荐(0)
摘要:9.8 给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码就是n分有几种表示法。解法:使用回溯法进行解决,实际上就是一个类似枚举的过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。C++实现代码:#include#includeusing ... 阅读全文
posted @ 2014-12-08 11:48 Jessica程序猿 阅读(306) 评论(0) 推荐(0)
摘要:9.7 编写函数,实现许多图片编辑软件都支持的“填充颜色”功能。给定一个屏幕(以二维数组表示,元素为颜色值)、一个点和一个新的颜色值,将新颜色值填入这个点的周围区域,直到原来的颜色值全部改变。类似leetcode:Surrounded Regions解法:首先,想象一下这个方法是怎么回事。假设要对一... 阅读全文
posted @ 2014-12-08 10:04 Jessica程序猿 阅读(257) 评论(0) 推荐(0)
摘要:9.6 实现一种算法,打印n对括号的全部有效组合(即左右括号正确配对)。类似leetcode:Generate Parentheses解法:从头开始构造字符串,从而避免出现重复字符串。在这个解法中,逐一加入左括号和右括号,只有字符串仍然有效。每次递归调用,都会有个索引指向字符串的某个字符。我们需要选... 阅读全文
posted @ 2014-12-08 08:36 Jessica程序猿 阅读(253) 评论(0) 推荐(0)
摘要:9.5 编写一个方法,确定某字符串的所有排列组合。类似leetcode:Permutations解法:跟许多递归问题一样,简单构造法非常管用。假设有个字符串S,以字符序列a1a2a...an表示。终止条件:n=1S=a1,只有一种排列组合,即字符串a1情况:n=2S=a1a2 有两种排列组合a1a2... 阅读全文
posted @ 2014-12-07 23:30 Jessica程序猿 阅读(196) 评论(0) 推荐(0)
摘要:9.4 编写一个方法,返回某集合的所有子集。类似leetcode:Subsets解法:解决这个问题之前,我们先要对时间和空间复杂度有个合理的评估。一个集合会有多少子集?我们可以这么计算,生成了一个子集时,每个元素都可以“选择”在或者不在这个子集中。也就是说,第一个元素有两个选择:它要么在集合中,要么... 阅读全文
posted @ 2014-12-07 21:50 Jessica程序猿 阅读(278) 评论(0) 推荐(0)
摘要:9.3 在数组A[0...n-1]中,有所谓的魔术索引,满足条件A[i]=i。给定一个有序整数数组,元素值给不相同,编写一个方法,在数组A中找出一个魔术索引,若存在的话。进阶:如果数组元素有重复值,又该如何处理。?解法一,选择蛮力法,我们可以直接迭代访问整个数组,找出符号条件的元素。int magi... 阅读全文
posted @ 2014-12-07 20:27 Jessica程序猿 阅读(446) 评论(0) 推荐(0)
摘要:9.2 设想有个机器人坐在X*Y网格的左上角,只能向右、向下移动。机器人从(0,0)到(X,Y)有多少种走法?进阶:假设有些点为“禁区”,机器人不能踏足。设计一种算法,找到一条路径,让机器人从左上角移动到右下角。类似leetcode:Unique Paths和Unique Paths II解法:我们... 阅读全文
posted @ 2014-12-07 18:46 Jessica程序猿 阅读(306) 评论(0) 推荐(0)
摘要:9.1 有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一个方法,计算小孩有多少种上楼梯的方法。解法:我们可以采用自上而下的方式来解决这个问题。小孩上楼梯的最后一步,也就是抵达第n阶的那一步,可能走1阶、2阶或3阶。也就是说,最后一步可能是从第n-1阶往上走1阶、从n-2阶往... 阅读全文
posted @ 2014-12-07 16:11 Jessica程序猿 阅读(380) 评论(0) 推荐(0)
摘要:7.7 有些数的素因子只有3、5、7,请设计一个算法,找出其中第k个数。解法:首先,我们可以将满足条件的前几个数列出来,以此寻找解题思路。一种简单的思路就是对于已经列出的数,我们依次去乘以3,5,7得到一组数 然后找出最小且还没有列出的数,加入到这个列表。然后重复上面的步骤: 乘以3,5,7,找出最... 阅读全文
posted @ 2014-12-07 11:30 Jessica程序猿 阅读(308) 评论(0) 推荐(0)
摘要:7.6 在二维平面上,有一些点,请找出经过点数最多的那条线。解法:类似于leetcode:Max Points on a Line我们只需在任意两点之间“画”一条无限长的直线(也即不是线段),并利用散列表追踪哪条直线出现的次数最多。这种做法的时间复杂度O(n^2),因为一共有n^2条线段。通过将每一... 阅读全文
posted @ 2014-12-07 11:00 Jessica程序猿 阅读(276) 评论(0) 推荐(0)
摘要:7.5 在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分。假定正方形的上下两条边与x轴平行。解法:要将两个正方形对半分,这条线必须连接两个正方形的中心点。利用slope=(y1-y2)/(x1-x2)就能算出斜率。以两个中心点算出斜率后,就能以同一公式求得线段的起点和终点。 阅读全文
posted @ 2014-12-07 10:44 Jessica程序猿 阅读(151) 评论(0) 推荐(0)
摘要:7.3 给定直角坐标系上的两条线,确定这两条线会不会相交。解法:此题有很多不确定的地方:两条线的格式是什么?两条线实为同一条怎么处理?这些含糊不清的地方最好跟面试官讨论一下。下面将做出以下假设:若两条线是相同的(斜率和y轴截距相等),则认为这两条线相交;两条线若不平行则必相交。因此,要检查两条线相交... 阅读全文
posted @ 2014-12-06 22:27 Jessica程序猿 阅读(162) 评论(0) 推荐(0)
摘要:5.1 写程序使整数N中第i位到第j位的值与整数M中的相同。题目给定两个32位的数,N和M,还有两个指示位的数,i和j。 写程序使得N中第i位到第j位的值与M中的相同(即:M变成N的子串且位于N的第i位和第j位之间)例子:输入: N = 10000000000, M = 10101, i = 2, ... 阅读全文
posted @ 2014-12-06 17:18 Jessica程序猿 阅读(222) 评论(0) 推荐(0)
摘要:4.9 给定一颗二叉树,其中每个结点都含有一个数值。设计一个算法,打印结点数值总和等于某个给定值的所有路径。注意,路径不一定非得从二叉树的根节点或叶子节点开始或结束。类似于leetcode:Path Sum IIC++实现代码:(使用了双重的递归)对于不含有parent指针域时。#include#i... 阅读全文
posted @ 2014-12-06 15:23 Jessica程序猿 阅读(215) 评论(0) 推荐(0)
摘要:4.8 你有两棵非常大的二叉树:T1,有几百万个结点;T2,有几百个结点。设计一个算法,判断T2是否为T1的子树。如果T1有这么一个结点n,其子树与T2一模一样,则T2C++实现代码:#include#includeusing namespace std;//Definition for binar... 阅读全文
posted @ 2014-12-06 14:28 Jessica程序猿 阅读(231) 评论(2) 推荐(0)
摘要:4.7 设计并实现一个算法,找出二叉树中某两个结点的第一个共同祖先。不得将额外的结点储存在另外的数据结构中。注意:这不一定是二叉查找树。解答本题的关键应当是在Avoid storing additional nodes in a data structure 这句话上。我的理解是,不允许开额外的空间... 阅读全文
posted @ 2014-12-06 14:04 Jessica程序猿 阅读(257) 评论(0) 推荐(0)