p****e 发帖数: 37 | 1 贴个楼主事后写的:
bool _re_match(const char *str, const char *pattern, char prev_char) {
// 如果str匹配完,检查pattern是否匹配完,或者还剩一个"*"
if (*str == NULL)
return (*pattern == NULL || (*pattern == '*' && *(pattern+1) == NULL
)) ? true : false;
if (*pattern != '*')
{
// 如果当前pattern char不是'*', 试图匹配当前的str char, 然后
继续。
if (*pattern == '.' || *pattern == *str)
{
if (_re_match(str+1, pattern+1, *pattern))
return true;
... 阅读全帖 |
|
p****e 发帖数: 37 | 2 贴个楼主事后写的:
bool _re_match(const char *str, const char *pattern, char prev_char) {
// 如果str匹配完,检查pattern是否匹配完,或者还剩一个"*"
if (*str == NULL)
return (*pattern == NULL || (*pattern == '*' && *(pattern+1) == NULL
)) ? true : false;
if (*pattern != '*')
{
// 如果当前pattern char不是'*', 试图匹配当前的str char, 然后
继续。
if (*pattern == '.' || *pattern == *str)
{
if (_re_match(str+1, pattern+1, *pattern))
return true;
... 阅读全帖 |
|
h**i 发帖数: 431 | 3 贴个新手写的
// compare two characters
bool char_equal(const char *a, const char *b)
{
if (*a!='\0')
return (*b=='.' || *a==*b);
else
return *b=='\0';
}
// the required function
bool isMatch(const char *s, const char *p)
{
if (*s=='\0' && *p=='\0')
return true;
if (*p=='\0')
return *s=='\0';
if (*(p+1)=='\0')
{
if (*s=='\0')
return false;
... 阅读全帖 |
|
s****j 发帖数: 67 | 4 平面最近点对那题,提供一种方法供参考,该方法看似复杂度o(n^2),但实际使用中几
乎是o(n)(不算nlgn排序的预处理)。主要是利用了三角形两边之差小于第三边的性质
,大大减枝。另外该方法实现简单,比传统o(nlgn)的实现简单很多也直观很多。
代码如下:
#include
#include
#include
#include
#include
using namespace std;
const int maxn=100005;
const double eps=1e-8;
struct Point
{
double x,y,dis;
} p[maxn];
int n;
bool cmpp(const Point &p1,const Point &p2)
{
return p1.dis
}
void solve()
{
sort(p,p+n,cmpp);
double ans=1e18,now;
int i,j;
for (i=0;i阅读全帖 |
|
s*******f 发帖数: 1114 | 5 static const int MAX_LEN = 10000000;//max size, if we cannot find
deplication within MAX_LEN, the random function is good.
//return where it begin duplicate
int TestRandomFun(int (*f)()){
static const int INIT_LEN = 100000;
static const int SUBARR_LEN = 10; //find 10-len substr first then
keep comparing,
static const int DUP_THRESHHOD = 1000; //if it keep equalling to
1000, we say then random function produce duplications.
vector v(INIT_LEN);
int c = 0;
while (v.size() < MAX_LEN){
for (int ... 阅读全帖 |
|
j*******g 发帖数: 4 | 6 见过很多次这个题目了,一直没有招,下面写了一个又臭又长的, 方法很笨, 求建议
, 欢迎批评和指正
这样的代码面试可以通过吗?
////////////////////////////////////////////////////////////////
#include
#include
using namespace std;
//假设16位的整型
// -32768 , +32767
const char MAX_INT[] = "32767";
const char MIN_INT[] = "32768";
const int MAX_STRLEN = 5;
bool my_atoi(const char *str, int &res)
{
if(str == NULL)
{
cout << "Invalid pointer" << endl;
return false;
}
int index = 0;
if(str[index] == '-' || s... 阅读全帖 |
|
q****x 发帖数: 7404 | 7 string add(const string& s1, const string& s2)
{
string s = s1 + s2;
return s;
}
string add2(const string& s1, const string& s2)
{
return (s1 + s2);
}
记得有参考书说add2()会比add()快,因为编译器直接生成一个临时变量云云。谁能详
细解释一下细节? |
|
O******i 发帖数: 269 | 8 最近面了一家IT大公司被拒,一共经历了N轮技术面试。自己感觉还不算太坏,但也有
三轮发挥不太完美,所以心里很没底。
结果还是被拒了。
下面是这三轮的详细经历,请大家探讨一下大公司招人的标准。
第i轮是找二叉树从根开始的所有路径,使得该路径上所有节点的值之和等于一个给定
的数。我犯了一个战略错误,因为我在准备过程中看过CarrerCup的更通用的解法,不
要求从根开始,也不要求到叶子结束,于是我直接用了那个思路,在白板上写下了类似
下面的代码
void FindPath(Node* root, int sum, int path[], int level)
{
if (root == NULL)
return;
int s = 0;
for (int i = 0; i < level; i++)
s += path[i];
int value = root->data;
if (s + value == sum)
PrintPath(path, level, value);
path[leve... 阅读全帖 |
|
b*****c 发帖数: 1103 | 9 来自主题: JobHunting版 - 问个算法题 bitmap??
用map
struct ltstr
{
bool operator()(const char* s1, const char* s2) const
{
return strcmp(s1, s2) < 0;
}
};
map |
|
S********t 发帖数: 3431 | 10 看似是旧题,你仔细做就知道不是了。跟经典的重健二叉树的题有点类似,但要稍难些。
现在有个树的类,不让你直接知道树的结构,但是有一个visitor可以访问前
序和后序的节点,现在你要写一个你自己的visitor目的是重建树,给你一场面试的时
间你能写吗?
struct Node { ... };
class Tree {
public:
void Walk(TreeVisitor *visitor);
...
};
class TreeVisitor {
public:
virtual ~TreeVisitor();
virtual void PreOrder(const char *node_name, const char *node_value, bool is_leaf) = 0;
virtual void PostOrder(const char *node_name, const char *node_value, bool is_leaf) = 0;
};
现在你要做的是:
1 定义一个你自己的tree data structure (class MyTree)
2 写一个... 阅读全帖 |
|
j*******g 发帖数: 4 | 11 见过很多次这个题目了,一直没有招,下面写了一个又臭又长的, 方法很笨, 求建议
, 欢迎批评和指正
这样的代码面试可以通过吗?
////////////////////////////////////////////////////////////////
#include
#include
using namespace std;
//假设16位的整型
// -32768 , +32767
const char MAX_INT[] = "32767";
const char MIN_INT[] = "32768";
const int MAX_STRLEN = 5;
bool my_atoi(const char *str, int &res)
{
if(str == NULL)
{
cout << "Invalid pointer" << endl;
return false;
}
int index = 0;
if(str[index] == '-' ||... 阅读全帖 |
|
s******n 发帖数: 3946 | 12 觉得那个不太好,用share pointer:
class COWString {
share_ptr data;
public:
COWString(const char* input)
{
data = share_ptr(new CString(input));
}
COWString(const COWString& str)
{
data = str.data;
}
COWString& operator=(const COWString& str)
{
data = str.data;
return *this;
}
COWString& SetAt(int index, char c)
{
CString* newStr = new CString(data->c_str());
newStr->SetAt(index, c);
data = share_ptr(newStr);
return *this;
}
char GetAt(int index) const
{
... 阅读全帖 |
|
s******n 发帖数: 3946 | 13 觉得那个不太好,用share pointer:
class COWString {
share_ptr data;
public:
COWString(const char* input)
{
data = share_ptr(new CString(input));
}
COWString(const COWString& str)
{
data = str.data;
}
COWString& operator=(const COWString& str)
{
data = str.data;
return *this;
}
COWString& SetAt(int index, char c)
{
CString* newStr = new CString(data->c_str());
newStr->SetAt(index, c);
data = share_ptr(newStr);
return *this;
}
char GetAt(int index) const
{
... 阅读全帖 |
|
l*********y 发帖数: 142 | 14 #include
#include
#include
#include
#include
#include
#include
using namespace std;
class Counter {
public :
Counter() {
counter = 0;
}
void increment() {
counter++;
}
void decrement() {
counter --;
}
int getValue() {
return counter;
}
private:
int counter;
};
class COWString {
public:
COWString() {
pointer = NULL;
rc = new Counter();
}... 阅读全帖 |
|
k*****y 发帖数: 744 | 15 用stl写个练练手。
struct cmp_start{
inline bool operator()(const Interval lhs, const Interval rhs){
return lhs.start < rhs.start;
}
};
struct cmp_end{
inline bool operator()(const Interval lhs, const Interval rhs){
return lhs.end < rhs.end;
}
};
vector insert(vector &intervals, Interval newInterval) {
vector::iterator lower, upper;
lower = lower_bound(intervals.begin(), intervals.end(),
Interval(newInterval.st... 阅读全帖 |
|
k*****y 发帖数: 744 | 16 用stl写个练练手。
struct cmp_start{
inline bool operator()(const Interval lhs, const Interval rhs){
return lhs.start < rhs.start;
}
};
struct cmp_end{
inline bool operator()(const Interval lhs, const Interval rhs){
return lhs.end < rhs.end;
}
};
vector insert(vector &intervals, Interval newInterval) {
vector::iterator lower, upper;
lower = lower_bound(intervals.begin(), intervals.end(),
Interval(newInterval.st... 阅读全帖 |
|
l*********8 发帖数: 4642 | 17 这个题目很容易出错啊。
我写在纸上的程序好几个bugs。
加上在电脑的调试修改的时间,我总共花了两个小时才让程序基本正确(还不敢保证百分百正确,可能需要更多的测试案例)。这么慢怎么面试啊?
下面是程序(测试程序就不贴了):
void JustifyOneLine(const vector & words, int L, int lineStart, int
& lineEnd, vector & blankNum)
{
blankNum.clear();
int lengthSum = words[lineStart].size();
for (lineEnd = lineStart+1; lineEnd < words.size() && lengthSum + 1 +
words[lineEnd].size() <= L; lineEnd++) {
lengthSum += 1 + words[lineEnd].size();
blankNum.push_back(1);
}
int ... 阅读全帖 |
|
l*********8 发帖数: 4642 | 18 这个题目很容易出错啊。
我写在纸上的程序好几个bugs。
加上在电脑的调试修改的时间,我总共花了两个小时才让程序基本正确(还不敢保证百分百正确,可能需要更多的测试案例)。这么慢怎么面试啊?
下面是程序(测试程序就不贴了):
void JustifyOneLine(const vector & words, int L, int lineStart, int
& lineEnd, vector & blankNum)
{
blankNum.clear();
int lengthSum = words[lineStart].size();
for (lineEnd = lineStart+1; lineEnd < words.size() && lengthSum + 1 +
words[lineEnd].size() <= L; lineEnd++) {
lengthSum += 1 + words[lineEnd].size();
blankNum.push_back(1);
}
int ... 阅读全帖 |
|
c*i 发帖数: 348 | 19 To be completed in any language
Write a function called enlargeImage which takes as parameters an array of
unsigned 8-bit integers, a width, a height and a scaling ratio. The function
should return an array of unsigned 8-bit integers. In C, the function
signature would look as follows:
unsigned char *enlargeImage(const unsigned char *pixels, const int width,
const int height, const float scalingRatio);
The input and output arrays contain the pixel values for the Y plane of a
YUV image.
The funct... 阅读全帖 |
|
z********c 发帖数: 72 | 20 不知道什么要求。。我直接写的搜索然后优化成DP,他说很好
merge写了,那一场45分钟全部用来搞这个题了。。。。
补充一下电面题把:
F:
1. int strstr (const char *haystack, const char *needle),要你实现,
bruteforce就行
2. int strstr (const char *haystack[], const char *needle),意思就是haystack
太长了,然后一个串存不下,变成存个数组里, 把他们concatenate 以后就是
haystack,还是一样的要求,要你实现,不能有额外空间
3. 给一组字符串,按anagram分组,输出
G:
1. 找到ll里最后k个节点,把他们放到前面来
2. 那题在板上说过,一个iterator,有next和hasNext,现在要你加个wrapper,使得
支持peek操作
不少了哥。。。我问了那么多人绝对我写的码比他们都多。。 |
|
j********e 发帖数: 1192 | 21 我没有说字符集相同就能scramble,字符集相同是必要条件,而不充分。
我的做法是,先找到一个位置i在s1,j在s2使得分割后的4个字符串两两
有相同的字符集(i=j 或者i=N-j)。然后接着对这2对字符串继续做同样
的事情连寻找分割位置。这样递归下去,如果有某对字符串无法找到分割
位置,则表示失败。否则,最后分隔最小的字符串只有一个字符。就可以
判断scramble成功。
问题是,如果有多个分割位置,是否任选一个都可以?如果必须测试每个可能的分割位置,那复杂度就不好说了。
下面是我的简单实现代码,通过了leetcode的online judge (包括judge large)。这段代码中会处理所有可能的分割位置。如果只选第一个可能的分割位置,有一个测试失败了。
#include
#include
#include
#include
using namespace std;
#define BITMAP_LEN 256
bool compare_char_set(const char *s1, con... 阅读全帖 |
|
f*********m 发帖数: 726 | 22 A robot is located at the top-left corner of a m x n grid (marked ‘Start’
in the diagram below). The robot can only move either down or right at any
point in time. The robot is trying to reach the bottom-right corner of the
grid (marked ‘Finish’ in the diagram below). How many possible unique
paths are there?
Follow up for "Unique Paths":
Now consider if some obstacles are added to the grids. How many unique paths
would there be?
An obstacle and empty space is marked as 1 and 0 respectively in t... 阅读全帖 |
|
w****x 发帖数: 2483 | 23 /*
Serialize/DeSerialize a tree
*/
struct NODE
{
int nVal;
vector vec;
NODE(int n) : nVal(n) {}
};
void _inner_serial(NODE* pNode, char*& p)
{
if (NULL == pNode)
return;
*p++ = pNode->vec.size();
*p++ = pNode->nVal;
for (vector::iterator it = pNode->vec.begin();
it != pNode->vec.end(); it++)
_inner_serial(*it, p);
}
const char* Serialize(NODE* pRoot, char mem[])
{
if (NULL == mem || NULL == pRoot)
return NULL;
char... 阅读全帖 |
|
l********t 发帖数: 878 | 24 /*accepted*/
bool equalVector(vector v1, vector v2){
for(int ii = 0; ii < v1.size(); ++ii){
if (v1[ii] != v2[ii]) return false;
}
return true;
}
bool compareVector(vector v1, vector v2){
for(int ii = 0; ii < v1.size(); ++ii){
if (v1[ii] < v2[ii]) return true;
else if (v1[ii] > v2[ii]) return false;
}
return false;
}
class Solution {
public:
vector > fourSum(vect... 阅读全帖 |
|
l********t 发帖数: 878 | 25 /*accepted*/
bool equalVector(vector v1, vector v2){
for(int ii = 0; ii < v1.size(); ++ii){
if (v1[ii] != v2[ii]) return false;
}
return true;
}
bool compareVector(vector v1, vector v2){
for(int ii = 0; ii < v1.size(); ++ii){
if (v1[ii] < v2[ii]) return true;
else if (v1[ii] > v2[ii]) return false;
}
return false;
}
class Solution {
public:
vector > fourSum(vect... 阅读全帖 |
|
z*y 发帖数: 1311 | 26 const int &func (int a, int b) const;
what is the meaning of first "const" and last "const"?
what is the meaning of "&"? |
|
Q*******e 发帖数: 939 | 27 const char * string; // 内容只读
char * const string; //指针只读
const char * const string; //两者都只读 |
|
w****x 发帖数: 2483 | 28 发现这道题属于没见过肯定想不出来,知道怎么解也很难写对。昨天重新写了一下,觉
得学到蛮多的,分享一下。
以前写过一个很挫的DP版本:
int GetEditDist(const char* str1, const char* str2)
{
assert(str1 && str2);
int nLen1 = strlen(str1);
int nLen2 = strlen(str2);
int* rec = new int[nLen2];
bool bFound = false;
for (int i = 0; i < nLen2; i++)
{
if (str2[i] == str1[0])
bFound = true;
rec[i] = bFound ? i : i+1;
}
bFound = (str2[0] == str1[0]); //(str2[0] == str1[0]) not false
for (int i = 1; i < nLe... 阅读全帖 |
|
j*****y 发帖数: 1071 | 29 这是 c++ header file new 里面的原型
void* operator new(std::size_t) throw (std::bad_alloc);
void* operator new[](std::size_t) throw (std::bad_alloc);
void operator delete(void*) throw();
void operator delete[](void*) throw();
void* operator new(std::size_t, const std::nothrow_t&) throw();
void* operator new[](std::size_t, const std::nothrow_t&) throw();
void operator delete(void*, const std::nothrow_t&) throw();
void operator delete[](void*, const std::nothrow_t&) throw();
也就是说 new 后面跟的是一个 size 的参数
可是... 阅读全帖 |
|
w****x 发帖数: 2483 | 30 /*
Serialize/DeSerialize a tree
*/
struct NODE
{
int nVal;
vector vec;
NODE(int n) : nVal(n) {}
};
void _inner_serial(NODE* pNode, char*& p)
{
if (NULL == pNode)
return;
*p++ = pNode->vec.size();
*p++ = pNode->nVal;
for (vector::iterator it = pNode->vec.begin();
it != pNode->vec.end(); it++)
_inner_serial(*it, p);
}
const char* Serialize(NODE* pRoot, char mem[])
{
if (NULL == mem || NULL == pRoot)
return NULL;
char... 阅读全帖 |
|
w****x 发帖数: 2483 | 31 /*
Serialize/DeSerialize a tree
*/
struct NODE
{
int nVal;
vector vec;
NODE(int n) : nVal(n) {}
};
void _inner_serial(NODE* pNode, char*& p)
{
if (NULL == pNode)
return;
*p++ = pNode->vec.size();
*p++ = pNode->nVal;
for (vector::iterator it = pNode->vec.begin();
it != pNode->vec.end(); it++)
_inner_serial(*it, p);
}
const char* Serialize(NODE* pRoot, char mem[])
{
if (NULL == mem || NULL == pRoot)
return NULL;
char... 阅读全帖 |
|
s**********1 发帖数: 58 | 32 我也贴一个,没有上面lucky的简单,不过可以改成binary search,lucky的那个应该
不好改
主要就是写了个iterator
enum FindType {
Lesser,
LesserEqual,
Equal,
GreaterEqual,
Greater
};
class Iterator {
public:
Iterator(const vector& array)
:array(array)
{
assert(array.size());
ascending = array.front() <= array.back();
offset = ascending ? 0 : array.size() - 1;
}
bool can_step(bool forward) {
int new_offset = offset + ascending == forward ? 1 : -1;
retu... 阅读全帖 |
|
w****x 发帖数: 2483 | 33 一直认为面试出这么难得题真是过分啊!!
================= kth element in young tablet (M+N)log(numeric range)
solution ===========
const int M = 4;
const int N = 4;
int getOrder(int A[M][N], int tg)
{
int c = 0;
int i = 0;
int j = N-1;
while (i < M && j >= 0)
{
if (A[i][j] >= tg)
j--;
else
{
c += j+1;
i++;
}
}
return c+1;
}
int getKthMin(int A[M][N], int k)
{
if (k <= 0 || k > M*N)
return INT_MIN;
int nBe... 阅读全帖 |
|
x******a 发帖数: 6336 | 34 只看到定义了linked element的class
linkedlist是不是要另外定义?
template
class ListElement {
public:
ListElement( const T& value):next(NULL), data(value){}
~ListElement(){}
ListElement *getNext() const{ return next;}
const T& value() const (return data;}
//... more member functions
private:
ListElement *next;
T data;
} |
|
d**********x 发帖数: 4083 | 35 那题目貌似就没卡复杂度。。。枉我昨天下班后还捏着鼻子写了个treap。。。结果证
明是输出格式错了,只过了两三个case的可以考虑检查一下输出格式
思路大致就是用order statistics tree。每次查询都是O(logn)。手写最大问题在于没
法定制容器的行为。。。
好吧,然后想了一下,如果用两个heap加一个map的话也是可以的,因为只是查询
median,没有要求随机查询kth元素,所以还是写复杂了
附上代码,treap是个随机平衡树,可以拿去用。
#include
#include
#include
#include
using namespace std;
template
class Treap {
public:
class Node {
public:
Node(const T& value)
: value_(value),
left_(NULL),
right_(NULL),... 阅读全帖 |
|
b******7 发帖数: 92 | 36 注意左移右移就行了
第一个栈[0...capacity0 - 1)
第二、三个栈[capacity0,...,N)分别一个从头开始++,一个从尾开始--
当第一个栈满而第二、三个栈不满时,做右移操作
反过来,但第二、三个栈满,而第一个栈伟满时,做左移操作
template
class TripleStack{
public:
TripleStack()
{
head0 = 0;
head1 = capacity0 = N/3;
head2 = N-1;
}
void push0(const T & e)
{
if(!isSubStackFull(0))
arr[head0++] = e;
else if(!isSubStackFull(1))
{
shiftRight();
arr[head0++] = e;
}
... 阅读全帖 |
|
d****n 发帖数: 397 | 37 这个算法行不行,基本上和上面的同学说的差不多。
第一步,把身高数组和b数组,一起按身高数组排序。
第二步,从最小的element开始,reconstruct 新的数组。
第一步是O(nlgn).第二步,最坏是O(n^2)。(当b全为0)时。
以下是程序。
#include
#include
#include
using namespace std;
struct mypair {
int a;
int b;
mypair(int c,int d) {a=c;b=d;}
friend bool operator<(const mypair&,const mypair&);
};
bool operator<(const mypair &p1,const mypair &p2) {
return (p1.a
}
vector heightcomp(vector& a,vector& b) {
int i,k,j,n,m;
n=a.size();
vector阅读全帖 |
|
u*****o 发帖数: 1224 | 38 话说我前几天去了学校的campus fair, 看到了nvidia的小booth那里在发卷子做题。现
场那个火爆呀,6个座位永远是满满的,很多人站着答,我才知道这家真是popular呀。
我要了一份卷子,发现好几题都不会。。就没交卷,现在和大家分享一下。因为需要我
一点点打字,所以我只写有点难度的吧。
1. what will be printed by the following code
struct Object{
unsigned char x, y, z, w;
};
int main(){
Object obj;
obj.x = 0x11;
obj.y = 0x22;
obj.z = 0x33;
obj.w = 0x44;
char* p = &obj;
for(int i=0; i<4; i++){
printf("%0xn",*((unsigned short*)++p));
}
return 0;
}
话说这能compile吗? char* p = &obj; 这句用cha... 阅读全帖 |
|
s***e 发帖数: 403 | 39 题目很基础。
第一题考堆栈结构的。参考csapp
第二题queue不能满足list的所有操作,因此是has-a
第三题int y后面花括号少一个分号,const id需要通过构造函数初始化,cout和endl
在std名字空间里。TrackedObject里面的东西全都是private的。Position没有重载
operator<<无法从cout输出。至于Position有没有constructor是代码好不好的标准,
和对不对无关。继承没有标明默认private.theCar.display()中theCar是const的,需
要void display() const。c.id给const成员赋值也是错的。 |
|
s********u 发帖数: 1109 | 40 struct Line{
double slope;
double intercept;
Line(Point p, Point q){
if(p.x == q.x){
slope = numeric_limits::max();
intercept = p.x;
}else{
slope = (double)(p.y - q.y)/(double)(p.x - q.x);
intercept = p.y - slope * p.x;
}
}
};
struct Comp{
static double eps;
bool operator()( const Line &l1, const Line &l2){
if( l1.slope - l2.slope < -eps )
... 阅读全帖 |
|
s***e 发帖数: 403 | 41 我对这个的理解是
把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)
... 阅读全帖 |
|
d***r 发帖数: 2032 | 42 下面这个code有错,因为m_value是const,不能赋值。能不能保留m_value的const属性
作其他改动使得code能够work呢?
class cTest
{
public:
cTest():{};
~cTest(){};
void SetValue( const double val ) const
{
m_value = val;
}
private:
double m_value;
};
int main( void )
{
cTest *t = new cTest();
t->SetValue(100);
delete t;
} |
|
w********s 发帖数: 1570 | 43 没人看出bug么?
class MyString {
private:
char* _data;
size_t _len;
void _init_data(const char *s) {
_data = new char[_len+1];
memcpy(_data, s, _len);
_data[_len] = '\0';
}
public:
MyString() {
_data = NULL;
_len = 0;
}
MyString(const char* p) {
_len = strlen (p);
_init_data(p);
}
MyString(const MyString& str) {
_len = str._len;
_init_data(str._data);
std::cout << "Copy Constructor is called! source: " << str._data << std:
:endl;
}
MyStri... 阅读全帖 |
|
p********4 发帖数: 58 | 44 我的理解,应该在vector中放地址,而不是object本身。这样才能实现多态。你原来的
做法,你的y中都是 class A. 不知道我的理解对不对。
int main()
{
const A a(1);
const B b(3);
const A *x[2] = { &a, &b };
typedef std::vector V;
V y({ &a, &b });
std::cout << x[0]->f() << x[1]->f() << std::endl;
for (auto i : y)
{
std::cout << i->f();
}
std::cout << std::endl;
return 0;
}
output:
14
14 |
|
l******o 发帖数: 144 | 45 不用60行。43行我这个(没编译没跑没测,如果错误请见谅)
vector f(const vector& vs) {
map> edges;
unordered_set out_vertices;
for (size_t i = 0; i + 1 < vs.size(); i++) {
const auto& s1 = vs[i];
const auto& s2 = vs[i + 1];
size_t j;
for (j = 0; j < s1.size() && j < s2.size(); j++) {
if (s1[j] != s2[j]) {
edges[s1[j]].insert(s2[j]);
break;
}
}
if (j == s2.size() && j < s1.size()) throw runtime_error();
for (char c ... 阅读全帖 |
|
a***e 发帖数: 413 | 46 找到一个解释比wiki清楚的source
http://www.inf.fh-flensburg.de/lang/algorithmen/pattern/kmpen.h
下面是根据那个原理写的KMP,这下觉得清楚多了。和正在学习的同学共享一下。。。
。。。顺便多谢各位。。。。
class Solution {
public:
char *strStr(char *haystack, char *needle) {
int pos = kmpSearch(haystack, needle);
if (pos == -1) return nullptr;
else return haystack + pos;
}
static void kmpPreprocess(const char *p, vector &b)
{
int i = 0, j = -1;
b[i] = j;
const int m = strlen(p);
... 阅读全帖 |
|
|
f**********t 发帖数: 1001 | 48 Well, my code is complex and sigfault. Let me go back if I have time.
This is too hard for a 45 minutes interview.
void skipSpace(const char **s) {
while (isspace(**s)) {
++(*s);
}
}
int getNum(const char **s) {
bool neg = false;
if (**s == '-') {
neg = true;
++(*s);
}
int cur = 0;
while (isdigit(**s)) {
cur = cur * 10 + (**s - '0');
++(*s);
}
--(*s);
return neg ? -cur : cur;
}
int opNum(int x, int y, char op) {
switch (op) {
case '+':
return x + y... 阅读全帖 |
|
|
t*****a 发帖数: 106 | 50 有限状态机不是早被批的体无完肤了吗...早没人用了。 贴个code,按别人的
思想写的
class Solution {
public:
int skipwhitespace(const char *p)
{
int i=0;
while(*(p+i)==' ') i++;
return i;
}
int skipsign(const char *p)
{
if(*p=='+'||*p=='-') return 1;
return 0;
}
int skipdigit(const char *p)
{
int i=0;
while(isdigit(*(p+i))) i++;
return i;
}
bool isNumber(const char *s) {
char *p=const_cast(s);
if(p==NULL) ret... 阅读全帖 |
|