由买买提看人间百态

topics

全部话题 - 话题: boole
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
B********t
发帖数: 147
1
来自主题: JobHunting版 - M家onsite面经
正在学OOD, 大家看看有什么问题:
class Polygon
{
public:
char type;
virtual bool requestResource();
virtual bool acceptRequest(int num);
virtual ~Polygon();
};
class Resource : public Polygon
{
pthread_mutex_t lock;
int numOfResources;
Polygon *neighbour;
public:
Resource();
bool acceptRequest(int num)
{
//lock
//if no resource, unlock, return false
//otherwise, assign, unlock, return true
}
Polygon *nextNeighbour();
};
class Base : publi... 阅读全帖
u*****o
发帖数: 1224
2
最近这道题很火爆!我找来貌似最EFFICIENT的CODE看(就是传说中的SIEVE OF
ERATOSHENES,多高端的名字!!),发现这么一行
请大家看第三行,第四行。。。为什么要用MEMSET这个function呢。。bool
array的话默认就是0吧。。。是不是为了省MEMORY呢?我直觉是。。。
走过路过的牛牛们指点一下吧。。。
void runEratosthenesSieve(int upperBound) {
int upperBoundSquareRoot = (int)sqrt((double)upperBound);
bool *isComposite = new bool[upperBound + 1];
memset(isComposite, 0, sizeof(bool) * (upperBound + 1));
for (int m = 2; m <= upperBoundSquareRoot; m++) {
if (!isComposite[m]) {
... 阅读全帖
s*******s
发帖数: 1031
3
来自主题: JobHunting版 - 我的几个面试算法解答。
follow一下我的面经。
http://www.mitbbs.com/article_t/JobHunting/32517841.html
整理了我的几个解答的算法,分享一下。欢迎批评指正。
多谢!
1. 写一个程序,找出 5^1234566789893943的从底位开始的1000位数字。
我用的递归+数组大数乘法。
// Caclulate (m^n)%(10^k). Keep the k integer numbers in an array.
// Note: the integer numbers are in reversed in the array
// Assume: m>0, n>0, k>0
// Need to check validity outside of this function.
// call calculate(5, 1234566789893943, 1000) to get result.
// Time complexity: O((log n) * k * k)
// Space complexity: O((log n) * k)
ve... 阅读全帖
s*******s
发帖数: 1031
4
来自主题: JobHunting版 - 我的几个面试算法解答。
follow一下我的面经。
http://www.mitbbs.com/article_t/JobHunting/32517841.html
整理了我的几个解答的算法,分享一下。欢迎批评指正。
多谢!
1. 写一个程序,找出 5^1234566789893943的从底位开始的1000位数字。
我用的递归+数组大数乘法。
// Caclulate (m^n)%(10^k). Keep the k integer numbers in an array.
// Note: the integer numbers are in reversed in the array
// Assume: m>0, n>0, k>0
// Need to check validity outside of this function.
// call calculate(5, 1234566789893943, 1000) to get result.
// Time complexity: O((log n) * k * k)
// Space complexity: O((log n) * k)
ve... 阅读全帖
j********r
发帖数: 25
5
来自主题: JobHunting版 - T家电面面经并且不解为何被秒拒
参考一下我的做题记录里提取出来的:
class Solution {
public:
vector > permuteUnique(vector &num) {
sort(num.begin(), num.end());
vector > ret;
int n = num.size();
bool *used = new bool[n];
vector index;
memset(used, 0, n*sizeof(bool));
permute(num, used, index, 0, ret);
delete[] used;
return ret;
}

void permute(const vector &num, bool used[], vector& candidate
, int pos, vector阅读全帖
m**********e
发帖数: 22
6
来自主题: JobHunting版 - wordBreak问题,有非递归的方法么
DP:
public bool WordBreak(string str, Dictionary dict)
{
// f[i] is true when str[0,...,i] is word break;
// f[i] = true when f[k]==true and str[k+1,...,i] is a word
// or str[0,...,i] is a word
int n = str.Length;
bool[] allWords = new bool[n];
int i, j;
for (i = 0; i < n; ++i)
{
if (!allWords[i] && dict.ContainsKey(str.Substring(0, i + 1)
)... 阅读全帖
a******e
发帖数: 710
7
来自主题: JobHunting版 - Google第一轮面经
2.他说他也是听说来的这道题,又是讨论描述了N久才搞明白,还跟我扯你知道为啥美
国分成这48个州么。。。比如给一个矩阵
1 2 2 3 (5)
3 2 3 (4) (4)
2 4 (5) 3 1 Atlantic
(6) (7) 1 4 5
(5) 1 1 2 4
#####请问括号里面的数字是什么意思?
每个数字代表该地区的海拔,然后西边是太平洋,东边是大西洋,让我返回所有path,
每个path能连通大西洋和太平洋,水只能从高处往低处走。
我到最后才发现他这个例子好像有点不对(他说他也不是很清楚,别人给他的。。汗)
,我觉得真正的意思应该是水流是单向的,否则岂不是随便怎么走都能连通??
#####若问这里提到的backtracking和recursion有何不同? 我一直不太了解
backtracking
我就用backtracking的方法,有点类似boggle game那题,从西海岸的点出发,往8个方
向走,如果没超出边界或者没用过,就走下去,直到到达东海岸,把这个路径存下来。
电面结束我才发现我有个bug,就是说,到达东海岸的时候不应该return,... 阅读全帖
a******e
发帖数: 710
8
来自主题: JobHunting版 - Google第一轮面经
2.他说他也是听说来的这道题,又是讨论描述了N久才搞明白,还跟我扯你知道为啥美
国分成这48个州么。。。比如给一个矩阵
1 2 2 3 (5)
3 2 3 (4) (4)
2 4 (5) 3 1 Atlantic
(6) (7) 1 4 5
(5) 1 1 2 4
#####请问括号里面的数字是什么意思?
每个数字代表该地区的海拔,然后西边是太平洋,东边是大西洋,让我返回所有path,
每个path能连通大西洋和太平洋,水只能从高处往低处走。
我到最后才发现他这个例子好像有点不对(他说他也不是很清楚,别人给他的。。汗)
,我觉得真正的意思应该是水流是单向的,否则岂不是随便怎么走都能连通??
#####若问这里提到的backtracking和recursion有何不同? 我一直不太了解
backtracking
我就用backtracking的方法,有点类似boggle game那题,从西海岸的点出发,往8个方
向走,如果没超出边界或者没用过,就走下去,直到到达东海岸,把这个路径存下来。
电面结束我才发现我有个bug,就是说,到达东海岸的时候不应该return,... 阅读全帖
r*******n
发帖数: 3020
9
多谢,改了后过了OJ。
如你所说,我加了1-D bool table来记录有没有解
后面DFS根据这个如果没有解就停止递归搜索
把整个code贴下面
vector wordBreak(string s, unordered_set &dict) {
// Note: The Solution object is instantiated only once and is reused
by each test case.
vector result;
int n = s.size();
vector> table(n, vector(n,false));
int max_len=0;
for(auto& word:dict){
if(max_len max_len=word.size();
}
... 阅读全帖
f********a
发帖数: 165
10
来自主题: JobHunting版 - 最近很hot startup一题
大概意思是有3个门,1个后面是prize,2个后面是goat, contestant选择一个门,然后
host在剩下的两个门选择一个goat门打开,然后contestant可以选择switch门,问题是
实现一个function:
bool play_game(bool contestant_will_switch_doors)
输入是true就是换门,false就是不换门,return是true就是最后选择到了prize那个,
false就是选择到了goat那个。很纠结 这个换门不换门其实最后都是50%的几率拿到
prize。这是我的实现,没能做完。哪位能否实现这个function以及整个游戏。
enum Door
{
goat,
prize
};
class Game
{
private:
vector vec;
int m_size;
public:
Game(int size){
m_size = size;
srand(time(NULL));
int ran = rand() % m... 阅读全帖
f********a
发帖数: 165
11
来自主题: JobHunting版 - 最近很hot startup一题
大概意思是有3个门,1个后面是prize,2个后面是goat, contestant选择一个门,然后
host在剩下的两个门选择一个goat门打开,然后contestant可以选择switch门,问题是
实现一个function:
bool play_game(bool contestant_will_switch_doors)
输入是true就是换门,false就是不换门,return是true就是最后选择到了prize那个,
false就是选择到了goat那个。很纠结 这个换门不换门其实最后都是50%的几率拿到
prize。这是我的实现,没能做完。哪位能否实现这个function以及整个游戏。
enum Door
{
goat,
prize
};
class Game
{
private:
vector vec;
int m_size;
public:
Game(int size){
m_size = size;
srand(time(NULL));
int ran = rand() % m... 阅读全帖
s***e
发帖数: 403
12
来自主题: JobHunting版 - wildcard matching 大case runtime error
我对这个的理解是
把pattern按照*分开成子串
然后按照顺序依次搜索
在开头和最后的串要特别调整一下.
class Solution {
public:
#define charMatch(s, p) (p == '?' || p == s)
int subStr (const char* s, int start, const char* p, int len)
{
while (s[start] != 0)
{
if (charMatch (s[start], p[0]))
{
bool match = true;
for (int j = 1; j < len; ++j)
if (s[start + j] == 0)
... 阅读全帖
x****g
发帖数: 1512
13
来自主题: JobHunting版 - 新鲜Google面经
内容是整型你比较容易解决,大不了判定一下啊当前值为INT_MAX,右结点必须为空,否
者错。
问题的引起是因为root->val+1划定下界引起的。
如果是浮点,你就不能定值了。
可以这样解决,其实并不需要判断每个结点的上下界。像单边,只要判单界即可。
就像根节点不用判,初始值随意。
bool isValidBST(TreeNode* root)
{
return BST_Helper(root,0,false,0,false);
}
bool BST_Helper(TreeNode* root, int low, bool checkLow, int high, bool
checkHigh)
{
if(root == NULL) return true;
if(checkLow)
{
if(root->val <= low) return false;
}
if(checkHigh)
{
//if(root->val > high) return false; //if BST support same value at
left ... 阅读全帖
f**********t
发帖数: 1001
14
来自主题: JobHunting版 - LinkedIn 面试题讨论
class Component {
public:
virtual char next() = 0;
virtual bool hasNext() = 0;
virtual void traverse() = 0;
};
class Leaf : public Component {
char val;
bool _hasNext;
public:
Leaf(char v) : val(v), _hasNext(true) { }
char next() {
_hasNext = false;
return val;
}
bool hasNext() {
return _hasNext;
}
void traverse() {
cout << val << ' ';
}
};
class Composite : public Component {
vector children;
size_t _idx = 0;
void goNext() {
while (_... 阅读全帖
r****7
发帖数: 2282
15
challenge me
bool isRepeat(string s) {
bool ret = false;
int sz = s.size();
vector pi(sz, 0);
int k = 0;
for (int i = 1; i < sz; i ++) {
while (k != 0 && s[i] != s[k]) {
k = pi[k - 1];
}
if (s[i] == s[k]) {
k ++;
}
pi[i] = k;
}
int d = sz - pi[sz - 1];

int idx = d - 1;
int expectedRes = 0;

bool rFlag = false;
if (d < 2) {
ret = false;
goto e;
}
while (t... 阅读全帖
r****7
发帖数: 2282
16
challenge me
bool isRepeat(string s) {
bool ret = false;
int sz = s.size();
vector pi(sz, 0);
int k = 0;
for (int i = 1; i < sz; i ++) {
while (k != 0 && s[i] != s[k]) {
k = pi[k - 1];
}
if (s[i] == s[k]) {
k ++;
}
pi[i] = k;
}
int d = sz - pi[sz - 1];

int idx = d - 1;
int expectedRes = 0;

bool rFlag = false;
if (d < 2) {
ret = false;
goto e;
}
while (t... 阅读全帖
e*******i
发帖数: 56
17
来自主题: JobHunting版 - 一道面试题
Following is a recursive function. Use ids of p and q to identify the p and
q node. It is not very elegant to me. Any suggestions to improve it.
Thanks
void countPQ(TreeNode *root, int idP, bool &startP, int& counterP, int idQ,
bool &startQ, int &counterQ)
{
if(root==NULL)
{
return;
}
countPQ(root->left, idP, startP, counterP, idQ, startQ, counterQ);
if( root->val==idP ) startP=false;
if(startP) counterP++;
if( root->val==idQ ) startQ=false;
if(startQ) counterQ... 阅读全帖
t**r
发帖数: 3428
18
走迷宫的 时间复杂度是多少?谢谢 如这个解法
#include
// Maze size
#define N 4
bool solveMazeUtil(int maze[N][N], int x, int y, int sol[N][N]);
/* A utility function to print solution matrix sol[N][N] */
void printSolution(int sol[N][N])
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
printf(" %d ", sol[i][j]);
printf("n");
}
}
/* A utility function to check if x,y is valid index for N*N maze */
bool isSafe(int maze[N][N], int x, int y)
{
// if (x,y out... 阅读全帖
f**********t
发帖数: 1001
19
来自主题: JobHunting版 - 问一道FB 的电面题
int needRooms(vector> &meetings) {
struct Cmp {
bool operator()(const tuple &x, const tuple &y) {
return get<0>(x) < get<0>(y);
}
};
vector> vt;
for (auto meeting : meetings) {
vt.push_back(make_tuple(get<0>(meeting), true));
vt.push_back(make_tuple(get<1>(meeting), false));
}
sort(vt.begin(), vt.end(), Cmp());
int res = 0;
int pretime = -1;
int start = 0;
int end = 0;
int rooms = 0;
for (auto t ... 阅读全帖
c*******e
发帖数: 621
20
来自主题: JobHunting版 - 求问一道multithreading问题
其实volatile bool就是thread safe的,不是吗?
thread safe是说get和set都按你的要求完成,不会出现undefined behavior的情况
比如int,你一个thread去set 1,另一个去set 2,结果int里可能变成3,这叫不
threadsafe
而如果一个volatile bool, 如果一个thread去set 1,另一个去set 0,结果不是0,就
是1
如果一个volatile bool, 如果一个thread去set 1,另一个也去set 1,结果只能是1
我觉得volatile bool就是thread safe,只不过它的threadsafety很难帮助你在不用
lock的情况下使你整个程序thread safe,因为如下的case
volatile boolean b;
void foo() {
if( b ) {
//Here another thread might have already changed the value of b to
false
b = false;
}
}
... 阅读全帖
a***e
发帖数: 413
21
我感觉word ladder 2的思路比这道题还容易点,算法还比较出名,就是很不好写。。
。。。。。。
yuxrose (鱼香肉丝), 我倒是找到两个比较简洁的答案,但是最烦recursion。。。。
。。我觉得自己都缺乏动力搞懂这个题,也可能今天状态不佳。看答案都不清楚为啥,
都想放弃刷题啦!
但是花时间仔细琢磨,第一个答案好像也不是那么那么难,但第二个就不知道在干嘛了
,搞了3d table。晕啊!哪位大牛能解释一下呢?
如果没见过,谁能15分钟内搞懂题意,到写完代码,估计得下了狠功夫的。
这个有recursion还比没有recursion的快!
class Solution {
private:
bool isDeformation(string &s1, string &s2)
{
if(s1.size() != s2.size())return false;
int albe[26] = {0};
for(int i = 0; i < s1.size(); i ++)
albe[s1[i]... 阅读全帖
I**********s
发帖数: 441
22
来自主题: JobHunting版 - 问个面试题
完整代码:
/**
* 一个Cube有6个面,每一个面有一个color,这6个面的color是可以
* 任意的,而且可以重复。输入一系列的cube,判断这些cube能否组成一个四面都是
同样
* 颜色的tower(这些cube一个接一个竖着摞,没有并排的cube)。
*/
#include
using namespace std;
// Cube class. Color of cube is given in constructor.
class cube {
public:
int sides[6]; // {top, side1, side2, side3, side4, bottom}
int colors[6];
int config;
cube() {}
void init(int color[6]) {
for (int i = 0; i < 6; ++ i) colors[i] = color[i];
config = 0;
}
// given a cube ... 阅读全帖
r*g
发帖数: 186
23
第二题第二问 下午发了删了 朋友说是对的就又发上来了
bool canIWin(int, std::vector &v, int sum, int obj)
{
for(int i = 1; i < v.size(); ++i){
if(v[i]){
if(sum + i >= obj){
return true;
}else{
v[i] = false;
bool res = canIWin(2, v, sum + i, obj);
v[i] = true;
if(!res){
return true;
}
}
}
}
return false;
}
int main()
{
std::vector... 阅读全帖
l****c
发帖数: 782
24
来自主题: JobHunting版 - FB Onsite新题,有人能看看吗?
这个DFS对吗?
bool FindThiefDFS(const vector& S, int idx, int n, int pos,
unordered_map, bool, HashPair>& cache) {
if (idx >= S.size()) return false;
if (S[idx] == pos) return true;
if (cache.find({idx, pos}) != cache.end()) return false;
if (pos >= 1 && FindThiefDFS(S, idx + 1, n, pos - 1, cache))
return true;
if (pos <= n - 2 && FindThiefDFS(S, idx + 1, n, pos + 1, cache))
return true;
cache[{idx, pos}] = fal... 阅读全帖
w*****d
发帖数: 105
25
来自主题: JobHunting版 - FB Onsite新题,有人能看看吗?
各位都是大牛,我只有写代码的份。
根据mitkook2的算法,采用DP,复杂度O(NK) time, O(N) space
bool solve1(int n, const vector & seq)
{
if (n < 1 || (n < 2 && !seq.empty()))
return true;
vector dp(n, true);
for (int s : seq) {
assert(0 <= s && s < n);
bool survive = false, prev = false;
for (int i = 0; i < n; ++i) {
const bool c = (s != i
&& ((i && prev)
|| (i + 1 < n && dp[i + 1])));
if (c)
survive... 阅读全帖
l*******t
发帖数: 79
26
用c++写了一下用memoization的版本,需要84ms过leetcode。不用memoization的话反
而只需要16ms。。。是因为memoization过程中有很多copy导致的吗?如果是这样,面
试过程中用哪种方法比较好呢?(或者代码可以更精简不用这么多copy?...) 毕竟前者
worst case复杂度是o(n^2),而后者是(2^n)额。。。求版上大神指点 跪谢Orz
class Solution {
public:
vector> partition(string s) {
vector> f(s.size(), vector(s.size()));
isPalindrome(f, s);

return dfs1(f, 0, s);
}

private:
unordered_map>> cache_;

void isPalind... 阅读全帖
l*3
发帖数: 2279
27
来自主题: JobHunting版 - 问道G的onsite题
就用recursion, 把是否该删除本节点的信息用函数递归带回来就行了,也不需要
hashmap, 不知道楼上们
为啥有些说的那么复杂。c++程序如下:
// helper function. 其中 parentIndices 是原来记录parent的数组,visited是记录
访问信息,toDelete是记录是否需要删除的信息,target是题目中给的目标节点。
void deleteHelper(vector& visited, vector& toDelete, vector
& parentIndices, int curIndex, int target) {
if (!visited[curIndex]) {
visited[curIndex] = true;
if (curIndex == target) {
toDelete[curIndex] = true;
} else {
deleteHelper(visited, toDelete, parentIndices, parentIndices[curIndex],
target)... 阅读全帖
p****o
发帖数: 46
28
来自主题: Programming版 - 一道interview design pattern题 (转载)
水木上有人说是adapter + command pattern.
不知道这command pattern指的是什么,怎么加上去呢
我先把我写的adapter pattern代码写上。
请大家帮忙看看
class 3rdPartyComputer{
public void start(){m_status=true;}
public void stop(){m_status=false;}
public bool Computerstatus(){return m_status;}
private bool m_status;
};
class 3rdPartyTV{
public void turnOn(){m_status=true;}
public void turnOff(){m_status=false;}
public bool TVstatus(){return m_status;}
private bool m_status;
};
interface device{
void Up();
void Down();
}
class Computer implements
p***o
发帖数: 1252
29
来自主题: Programming版 - 请教如何自己C++编程牛逼些
Here is some code from the book. You can decide if you want to
read it ... I would spend my time on STL and Boost, at least
they are shown to be WORKING.
class SparseMultiGRAPH
{ int Vcnt, Ecnt; bool digraph;
struct node
{ int v; node* next;
node(int x, node* t) { v = x; next = t; }
};
typedef node* link;
vector adj;
public:
SparseMultiGRAPH(int V, bool digraph = false) :
adj(V), Vcnt(V), Ecnt(0), digraph(digraph)
{ adj.assign(V, 0); }
int V() const { retur... 阅读全帖
g***l
发帖数: 2753
30
来自主题: Programming版 - 请教一个C++中function pointer的问题。
老大的这个方法是可行的。可是又出现新的问题了。
我定义了如下接口:
template
dec_base* new_object()
{
return new T;
}
typedef dec_base* (*ObjectGenerator)();
static std::map generator_map;
template
void register_dec_handle(int tag_id)
{
generator_map.insert(make_pair(tag_id,new_object));
}
如果把以上代码跟 main() 代码放在一个main.cpp里面,编译链接都没有问题。但是如
果把以上代码放在另外一个单独的sample.cpp里面,在另外一个main.cpp中的main()调用
register_dec_handle()的时间,gcc就会报告
g++ main.cpp sample.cpp -o sample.exe
main.cpp: 在函数‘int main(... 阅读全帖
n*******7
发帖数: 181
31
来自主题: Programming版 - 谁帮我测俩use case
osboxes@osboxes:~/proj/pc12306/Release$ ./pc12306
Total 55
start usecase1
Total time = 7.153685
start usecase2
Total time = 8.264017
diff --git a/pc12306.cpp b/pc12306.cpp
index 12ac896..c057c03 100644
--- a/pc12306.cpp
+++ b/pc12306.cpp
@@ -76,7 +76,7 @@ static void generateSearchPatterns() {
nSearches = offsets.size();
printf("Total %d\n", (int)nSearches);
for (Offsets::iterator it = offsets.begin(); it != offsets.end(); ++
it) {
- printf("%d %d %d\n... 阅读全帖
h**********c
发帖数: 4120
32
来自主题: Computation版 - 继续我们计算non-prime number 的探险
先前提到过 y = sin(a * pi /x), 对于质数a 在(1,a)是没有解得。
写了段程序,用牛顿法算 x, 跑了跑发现,原来这个一维系统有很多folds,又想了想
能不能用二维的系统来解这个问题呢?于是又了如下的构造
f = (f1,f2)^t
f1(x1,x2) = (x1 + exp(x2))* sin(pi * a /x1);
f2(x1,x2) = (x1*x1 -x2*x2)
求 f --〉0
这个系统看起来有个不错的jacobian,跑了跑程序,居然收敛了,但不知道收敛到哪里
去了,您有时间帮忙看看吧,能不能有更好的构造。或者用什么论证着干脆就是不可行
的,免得骑自行车去月球。
附程序c++
#include
#include
using namespace std;
#define PI (atan(1.0)*4.0)
#define __VERYSMALL (1.0E-10)
#define __ITERATIONLIMIT 20
bool isVerySmall (double d) {
return (a... 阅读全帖
h**********c
发帖数: 4120
33
来自主题: Mathematics版 - 继续我们计算non-prime number 的探险
先前提到过 y = sin(a * pi /x), 对于质数a 在(1,a)是没有解得。
写了段程序,用牛顿法算 x, 跑了跑发现,原来这个一维系统有很多folds,又想了想
能不能用二维的系统来解这个问题呢?于是又了如下的构造
f = (f1,f2)^t
f1(x1,x2) = (x1 + exp(x2))* sin(pi * a /x1);
f2(x1,x2) = (x1*x1 -x2*x2)
求 f --〉0
这个系统看起来有个不错的jacobian,跑了跑程序,居然收敛了,但不知道收敛到哪里
去了,您有时间帮忙看看吧,能不能有更好的构造。或者用什么论证着干脆就是不可行
的,免得骑自行车去月球。
附程序c++
#include
#include
using namespace std;
#define PI (atan(1.0)*4.0)
#define __VERYSMALL (1.0E-10)
#define __ITERATIONLIMIT 20
bool isVerySmall (double d) {
return (a... 阅读全帖
i****h
发帖数: 321
34
来自主题: JobHunting版 - 刚才的amazon phone interview 第一轮
大牛,我写了一个,可是指针有问题,能不能帮我看看啊?谢谢。
bool isBST(TreeNode *n, int *max, int *min){
if(n == NULL){
max = NULL;
min = NULL;
return true;
}
int *lmax, *lmin;
int *rmax, *rmin;
bool leftResult = isBST(n->left, lmax, lmin);
bool rightResult = isBST(n->right, rmax, rmin);
if( leftResult && rightResult ){
if(lmax != NULL && n->value < *lmax )
return false;
if(rmin != NULL && n->va
s*******e
发帖数: 93
35
来自主题: JobHunting版 - 一道有关String的面试题
因为只是词被打乱,空格被删除,没有打乱整个词组,所以我想到的做法是
(应该可以work,但是可能效率不是最高的)
bool equals(string s1, string s2);
string firstNString(string s, int count);
string substringFromIndex(string input, int index);
string sort(string);
(以上几个function应该可以意会,就不implement了)
bool beginsWith(string input, string word)
{
return equals(sort( firstNString(input,word.length) ) , sort(word) );
}
struct result
{
string str;
bool ok;
}
typedef struct result Result;
Result function(string input, string[] words)
{
found=false;... 阅读全帖
s*******f
发帖数: 1114
36
来自主题: JobHunting版 - facebook电面题目
bool FindThreeNum1(int in[], int len, int sum, int out[]){
if (!in || len < 3 || !out)
return false;
std::sort(in, in + len);
int prej = 1;
int prek = len - 1;
for (int i = 0; i < prek - 2; ++i){
bool nobig = true;
bool nosmall = true;
int j = prej;
int k = prek;
int two_sum = sum - in[i];
while(j < k){
if (in[j] + in[k] == two_sum){
out[0] = in[i];
out[1] = in[j];
... 阅读全帖
s*****n
发帖数: 994
37
来自主题: JobHunting版 - facebook电话二面题目
bool findSolution (int coefficient[], int size, int rightside){//coefficient
[i] for Xi.
if (size<1) return false;
int reviewed = new int[size];
int lreviewed = 0;
return findPartialSolution (reviewed,lreviewed, coefficient, size,
rightside);
}
bool findPartialSolution (int reviewed[], int lreviewed, int coefficient [],
int size, int rightside){
if (lreviewed==size){
for (int i=0;i return;
}
bool found=false;
for (int i=0; i阅读全帖
i**********e
发帖数: 1145
38
来自主题: JobHunting版 - 一道amazon题
我写的代码供参考:
void permute(string out, string word, bool used[]) {
int n = word.length();
if (out.length() == n) {
cout << out << endl;
return;
}
for (int j = 0; j < n; j++) {
if (used[j]) continue;
used[j] = true;
permute(out+word[j], word, used);
used[j] = false;
// skip through duplicate characters
while (j+1 < n && word[j] == word[j+1])
j++;
}
}
void permute(string word) {
sort(word.begin(), word.... 阅读全帖
s*****y
发帖数: 897
39
http://zebozhuang.blog.163.com/blog/static/17147980420112710523
在标准库算法中,next_permutation应用在数列操作上比较广泛.这个函数可以计算一组
数据的全排列.但是怎么用,原理如何,我做了简单的剖析.
首先查看stl中相关信息.
函数原型:
template
bool next_permutation(
BidirectionalIterator _First,
BidirectionalIterator _Last
);
template
bool next_permutation(
BidirectionalIterator _First,
BidirectionalIterator _Last,
BinaryPredicate _Comp
);
两个重载函数,第... 阅读全帖
s*****y
发帖数: 897
40
http://zebozhuang.blog.163.com/blog/static/17147980420112710523
在标准库算法中,next_permutation应用在数列操作上比较广泛.这个函数可以计算一组
数据的全排列.但是怎么用,原理如何,我做了简单的剖析.
首先查看stl中相关信息.
函数原型:
template
bool next_permutation(
BidirectionalIterator _First,
BidirectionalIterator _Last
);
template
bool next_permutation(
BidirectionalIterator _First,
BidirectionalIterator _Last,
BinaryPredicate _Comp
);
两个重载函数,第... 阅读全帖
i**********e
发帖数: 1145
41
来自主题: JobHunting版 - 新鲜onsite面经
我写的 boggle 游戏算法,DFS + trie.
一秒以内给出所有 5x5 的答案。
#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct Trie {
bool end;
Trie *children[26];
Trie() {
end = false;
memset(children, NULL, sizeof(children));
}
void insert(const char *word) {
const char *s = word;
Trie *p = this;
while (*s) {
int j = *s-'A';
assert(0 <= j && j < 26);
if (!p->childre... 阅读全帖
l*********y
发帖数: 142
42
来自主题: JobHunting版 - Palantir面经2
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct Segment {
int from, to;
};
struct cmp {
bool operator() (const Segment& s1, const Segment& s2) {
return s1.from < s2.from;
}
};
bool ... 阅读全帖
A**u
发帖数: 2458
43
来自主题: JobHunting版 - 请教一个题目
网上看到的,不知道是不是面是题目
写一段程序判定一个有向图G中节点w是否从节点v可达。(假如G中存在一条从v至w的路
径就说节点w是从v可达的)
。以下算法是用C 写成的,在bool Reachable函数中,你可以写出自己的算法。
class Graph{
public:
int NumberOfNodes();//返回节点的总数
bool HasEdge(int u,int v);//u,v是节点个数,从零开始依次递增,当有一条从u到v
的边时,返回true
};
bool Reachable(Graph&G, int v, int w)
如果象迷宫一样,可以标记,还好做 back keeping
但这个题目没发标记已经走过的node
改怎么写代码呢
O******i
发帖数: 269
44
来自主题: JobHunting版 - atoi很不好写,头都大了...
写了一个,要考虑的情况真多...
假定是16位整数,范围是-32768到+32767
bool my_atoi(const char* str, int16& num)
{
if (str == NULL || str[0] == '\0')
return false;
int i = 0;
bool IsNeg = (str[0] == '-')? true : false;
if (str[0] == '+' || str[0] == '-')
{
if (str[1] == '\0')
return false;

i = 1;
}
num = 0;
const int num_limit = 3276;
const int digit_limit = (IsNeg)? 8 : 7;
int digit = 0;
bool max_int_reached = false;
for (; str[... 阅读全帖
B*******1
发帖数: 2454
45
来自主题: JobHunting版 - 探讨IT大公司的hiring bar?
How about this one?
class Interval {
public:
Interval(int start_, int end_): start(start_),end(end_){}
int start;
int end;
};
bool comp(Interval &rhs, Interval &lhs)
{
return (rhs.start == lhs.start ? rhs.end < lhs.end : rhs.start < lhs.start);
}
bool check(vector &input)
{
int left = input[0].start;
int right = input[0].end;
for (int i = 1; i < input.size(); i++) {
if (right < input[i].start) {
return false;
} else {
right = max(input[i].end, right);
}
}
return true;
}
int main()
... 阅读全帖
d****o
发帖数: 1055
46
来自主题: JobHunting版 - Time complexity
下面找lowestCommonAncestor的代码如果tree balance的话time complexity是多少?
自己想的不保险,请教一下。
我觉得是O(nlogn)
bool contain(node* root, node* cur)
{
if(root)
{
if(root==cur) return true;
return contain(root->left,cur)||contain(root->right,cur);
}
return false;
}
node* lowest(node* root, node* n1, node* n2)
{
if(root==n1||root==n2) return root;
if(root==NULL) return NULL;
bool isLeft1 = false;
bool isLeft2 = false;
if(root->left)
{
isLeft1 = contain(root->left,n1); ... 阅读全帖
l****i
发帖数: 51
47
来自主题: JobHunting版 - 报个offer@FG,回报版面
bool Rand2(){ return true or false equally.};
// p is between 0 and 1
// return false for probability of p
bool PCal(double p)
{
p *= 2;
bool b = Rand2();
while(p != 0 && p! = 1)
{
b = Rand2();
if (!b && p > 1)
return false;
else (b && p < 1)
return true;
else
p = p *2;
}
return b;
}
l****i
发帖数: 51
48
来自主题: JobHunting版 - 报个offer@FG,回报版面
bool Rand2(){ return true or false equally.};
// p is between 0 and 1
// return false for probability of p
bool PCal(double p)
{
p *= 2;
bool b = Rand2();
while(p != 0 && p! = 1)
{
b = Rand2();
if (!b && p > 1)
return false;
else (b && p < 1)
return true;
else if ( p > 1)
p = (p-1) *2;
else
p * =2;
}
return b;
}
i**********e
发帖数: 1145
49
来自主题: JobHunting版 - 报个offer@FG,回报版面
我刚在linux上运行了,没有这方面的问题,不过我的程序是C++ 不是Java。
我测试了你的算法,返回结果都算满意,而且运行越多次,返回的结果越接近理想的 p
值。
你的算法不单简洁,而且复杂度是最优的,递归是 average 两次就返回答案。
expected # calls = 1*0.5 + 2*0.5^2 + 3*0.5^3 + ...
= Summation( k * 0.5^k ), k = 1 .. n
= 2 - (n+2)/2^n
When n = infinity,
expected # calls = 2
贴下code方便大家做测试:
#include
#include
#include
#include
using namespace std;
bool rand2() {
return (rand() % 2 == 0);
}
unsigned long long totalCalls = 0;
bool Prob2(double p, bool expected = tru... 阅读全帖
l****i
发帖数: 51
50
来自主题: JobHunting版 - 报个offer@FG,回报版面
bool Rand2(){ return true or false equally.};
// p is between 0 and 1
// return false for probability of p
bool PCal(double p)
{
p *= 2;
bool b = Rand2();
while(p != 0 && p! = 1)
{
b = Rand2();
if (!b && p > 1)
return false;
else (b && p < 1)
return true;
else
p = p *2;
}
return b;
}
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)