由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - flag新题
相关主题
问一道数据结构题请教一道题目
问一道amazon的Onsite题ooyala电面
看看这2道题, 有没有什么捷径问一道题(groupon)
大家刷题也别忘了看看CS基础知识新鲜的L一面
麻烦大家看看这个题目什么意思?Leetcode- Longest Substring Without Repeating Characters 的 test case
find longest subarray with the equal number of 0's, 1's若问OJ的insert interval这题
问个g的面试题onsite遇到的几个面试题
讨论个狗狗的题?讨论个subarray sum的变种问题
相关话题的讨论汇总
话题: int话题: length话题: subarray话题: newstart话题: rlt
进入JobHunting版参与讨论
1 (共1页)
a***o
发帖数: 1182
1
大家讨论一下,目前只想到brute force, 从length=1开始
看看每个是不是在subarray里面,事先可以把长度为length的subarray放到
一个hash table里面
Find shortest array (S), with all elements 0 <= S[i] <= X, that is not
subarray (Subarray has to be in same order, but not necessary consecutive)
of the given array A.
For example:
A = [0, 1, 0, 2, 0, 2]
X = 2
Solution is either [1, 1] or [2, 1]
X = 1
A = [0, 0, 1, 1, 0, 1]
Soluti is [1,0,0]
p******9
发帖数: 47
2
提供一个比较麻烦的O(n)解法,应该有更简单的做法
将其看成字符串,建后缀树,一层一层的往下走,直到某一层不是满的,我们可以知道
答案就在这一层上,将走过的路径和未出现的字符组成的新的字符串就是解。
a***o
发帖数: 1182
3
subarray不需要连续的啊,后缀树也能用?

【在 p******9 的大作中提到】
: 提供一个比较麻烦的O(n)解法,应该有更简单的做法
: 将其看成字符串,建后缀树,一层一层的往下走,直到某一层不是满的,我们可以知道
: 答案就在这一层上,将走过的路径和未出现的字符组成的新的字符串就是解。

p******9
发帖数: 47
4
对,后缀树相当于把这个字符内所有包含过的子串都涵盖了,按刚才算法走一遍,我们
就可以知道最短的不是原字符串子串的字符串,也就是答案的解
a***o
发帖数: 1182
5
不太理解,比如abcd
后缀树包含了abcd, bcd, cd,d
那ad不在里面呀?

【在 p******9 的大作中提到】
: 对,后缀树相当于把这个字符内所有包含过的子串都涵盖了,按刚才算法走一遍,我们
: 就可以知道最短的不是原字符串子串的字符串,也就是答案的解

p******9
发帖数: 47
6
拿你刚才的例子来说,第一层是满的,因为a,b,c,d这四个字符都包含了,第二层a下面
只有b一个结点,b下面只有c一个结点,c下面只有d一个结点,都是空的,那么我们在
第二层随意填加一个没出现的字符加上已有的字符,就组成了一个没出现过的子串,如
ac,ad,bd,ba,ca,cb,da,db,dc都可以。
我感觉这种方法还是太麻烦,求大神们给更好的方法。
a***o
发帖数: 1182
7
ac,ad不符合条件啊,看原题,不需要连续的...

【在 p******9 的大作中提到】
: 拿你刚才的例子来说,第一层是满的,因为a,b,c,d这四个字符都包含了,第二层a下面
: 只有b一个结点,b下面只有c一个结点,c下面只有d一个结点,都是空的,那么我们在
: 第二层随意填加一个没出现的字符加上已有的字符,就组成了一个没出现过的子串,如
: ac,ad,bd,ba,ca,cb,da,db,dc都可以。
: 我感觉这种方法还是太麻烦,求大神们给更好的方法。

p******9
发帖数: 47
8
不好意思 是我看错题了
l*********8
发帖数: 4642
9
看不懂题目啊。
在这个例子里:
A = [0, 1, 0, 2, 0, 2]
X = 2
一个答案是[1, 1]
哪里来两个1?
另外,要最短的sub-array, 那么只包含一个元素的sub-array不就是最短的??

【在 a***o 的大作中提到】
: 大家讨论一下,目前只想到brute force, 从length=1开始
: 看看每个是不是在subarray里面,事先可以把长度为length的subarray放到
: 一个hash table里面
: Find shortest array (S), with all elements 0 <= S[i] <= X, that is not
: subarray (Subarray has to be in same order, but not necessary consecutive)
: of the given array A.
: For example:
: A = [0, 1, 0, 2, 0, 2]
: X = 2
: Solution is either [1, 1] or [2, 1]

a***o
发帖数: 1182
10
是最短的非subarray...
1,1是自己创造的

【在 l*********8 的大作中提到】
: 看不懂题目啊。
: 在这个例子里:
: A = [0, 1, 0, 2, 0, 2]
: X = 2
: 一个答案是[1, 1]
: 哪里来两个1?
: 另外,要最短的sub-array, 那么只包含一个元素的sub-array不就是最短的??

相关主题
find longest subarray with the equal number of 0's, 1's请教一道题目
问个g的面试题ooyala电面
讨论个狗狗的题?问一道题(groupon)
进入JobHunting版参与讨论
l*********8
发帖数: 4642
11
I see, 谢谢!
有意思的题目。

【在 a***o 的大作中提到】
: 是最短的非subarray...
: 1,1是自己创造的

m****i
发帖数: 650
12
For example:
A = [0, 1, 0, 2, 0, 2]
X = 2
Solution is either [1, 1] or [2, 1]
[2,2]不可以么?
X = 1
A = [0, 0, 1, 1, 0, 1]
Soluti is [1,0,0]
[1,1,1] 不可以么?
a***o
发帖数: 1182
13
不可以,请看subarray定义...

【在 m****i 的大作中提到】
: For example:
: A = [0, 1, 0, 2, 0, 2]
: X = 2
: Solution is either [1, 1] or [2, 1]
: [2,2]不可以么?
: X = 1
: A = [0, 0, 1, 1, 0, 1]
: Soluti is [1,0,0]
: [1,1,1] 不可以么?

x*****0
发帖数: 452
14
mark
p****e
发帖数: 3548
15
you can use DP.
p****e
发帖数: 3548
16
不知对不,欢迎测试
// Type your C++ code and click the "Run Code" button!
// Your code output will be shown on the left.
// Click on the "Show input" button to enter input data to be read
#include
using namespace std;
int findnotsubarray(vector &rlt, vector &temp, int &X, int a[],
int &length, int start)
{
if(start>=length) return 0;
for(int t=0; t<=X; ++t)
{
int i = start;
for(; i {
if(t==a[i])
{
break;
}
}
if(i == length)
{
temp.push_back(t);
if(rlt.size() == 0 || rlt.size() > temp.size())
rlt.assign(temp.begin(), temp.end());
temp.pop_back();
return 2;
}
}
if(rlt.size() == 0 || rlt.size() > temp.size()+2)
{
int found = 0;
for(int t=0; t<=X; ++t)
{
int newstart = start;
for(;newstart if(t == a[newstart])
{
++newstart;
break;
}
temp.push_back(t);
int f = findnotsubarray(rlt, temp, X, a, length, newstart);
if(f == 2)
{
temp.pop_back();
return 1;
}
else if(f)
found = 1;
temp.pop_back();
}
return found;
}
else if(rlt.size() > 0)
return 1;
else
return 0;
}
int main() {
// Start typing your code here...
vector rlt, temp;
int X = 1, length = 6;
int a[6] = {0, 0, 1, 1, 0, 1};
if(findnotsubarray(rlt, temp, X, a, length, 0))
{
for(int i=0; i cout< cout< }
else
cout<<"The size of subarray is lager than original array's."< return 0;
}
1 (共1页)
进入JobHunting版参与讨论
相关主题
讨论个subarray sum的变种问题麻烦大家看看这个题目什么意思?
问一个题find longest subarray with the equal number of 0's, 1's
来道难一点的题问个g的面试题
一道小题讨论个狗狗的题?
问一道数据结构题请教一道题目
问一道amazon的Onsite题ooyala电面
看看这2道题, 有没有什么捷径问一道题(groupon)
大家刷题也别忘了看看CS基础知识新鲜的L一面
相关话题的讨论汇总
话题: int话题: length话题: subarray话题: newstart话题: rlt