由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - codility一道题
相关主题
问一道面试题目求教google 电面 answer
[难题求助] leetcode wordsearchsodoku solver 怎么做?
word search BST 解法,大测试超时,请大家指点迷津facebook的面试题
问一个面试题一道纠结的题,狗家的。
讨论一道面试题--number of connected componentsleetcode word search
cloudera的codebility的 testyelp一题,攒rp
Twitter电面面经+Online Test小结DFS比BFS好在哪?
攒人品,google电话面经问一道题
相关话题的讨论汇总
话题: int话题: dp话题: max话题: count话题: visited
进入JobHunting版参与讨论
1 (共1页)
h*********2
发帖数: 192
1
Given a non-empty array A. Set S[k] is defined as S[k]={A[k], A[A[k]], A[A[A
[k]]], ...}. For example, A={5, 4, 0, 3, 1, 6, 2}. S[2]={0, 5, 6, 2}. Find
out the longest Set size.
int solution(vector &A) {
//write your code in c++11
}
My idea is to DFS find each set and update a max size so far. Is it optimal?
Thanks!
a*******e
发帖数: 455
2
会 死循环吧。
比如 {0}。 否则dp
t********n
发帖数: 611
3
S[0] = [5,6,2,0]
S[2] = [0,5,6,2]
S[5] =[6,2,0,5]
S[6]= [2,0,5,6]
所以只要算出一个,其他的数就是一个循环,长度一样。所以不用重复计算。比如,只
要算出S[0],那么S[5],S[6],S[2] 都可以忽略了。然后找下一个不在数组
中的index,这里也就是1,然后算S[1]。不过既然S[0]的长度已经超过原来数组的
一半,所以这就是最佳长度。否则应该再计算S[1],S[1] = [4,1], 然后就只剩下S
[3]了。

[A
optimal?

【在 h*********2 的大作中提到】
: Given a non-empty array A. Set S[k] is defined as S[k]={A[k], A[A[k]], A[A[A
: [k]]], ...}. For example, A={5, 4, 0, 3, 1, 6, 2}. S[2]={0, 5, 6, 2}. Find
: out the longest Set size.
: int solution(vector &A) {
: //write your code in c++11
: }
: My idea is to DFS find each set and update a max size so far. Is it optimal?
: Thanks!

y**********a
发帖数: 824
4
public int largestSet(int[]A) {
int rel=0;
int[]dp=new int[A.length];
boolean[]v=new boolean[A.length];
for (int i=0;i if (!v[i]) rel=Math.max(rel, fillCycle(A, v, dp, i));
return rel;
}
int fillCycle(int[]A, boolean[]v, int[]dp, int i) {
int j=i;
for (j=i;!v[j];j=A[j]){
if (dp[j]!=0) return dfs(A, dp, i);
v[j]=true;
}
int count=1,k=A[j];
for (;k!=j;k=A[k]) ++count;
for (k=A[k];k!=j;k=A[k])dp[k]=count;
dp[j]=count;
return dfs(A, dp, i);
}
int dfs(int[]A, int[]dp, int i) {
if (dp[i]!=0) return dp[i];
return dp[i]=dfs(A, dp, A[i])+1;
}
o****s
发帖数: 143
5

S
按照这个思路写了一个:
public int longestSetSize(int A[], int k){
int count = 0;
int max = 0;
boolean[] visited = new boolean[A.length];
while(count < A.length){
if(k >= A.length || visited[k]){
for(int i=0;i if(!visited[i]){
k = i;
break;
}
}
}
int temp = 0;
while(k temp++;
k = A[k];
count++;
}

max = Math.max(max,temp);

}
return max;
}

【在 t********n 的大作中提到】
: S[0] = [5,6,2,0]
: S[2] = [0,5,6,2]
: S[5] =[6,2,0,5]
: S[6]= [2,0,5,6]
: 所以只要算出一个,其他的数就是一个循环,长度一样。所以不用重复计算。比如,只
: 要算出S[0],那么S[5],S[6],S[2] 都可以忽略了。然后找下一个不在数组
: 中的index,这里也就是1,然后算S[1]。不过既然S[0]的长度已经超过原来数组的
: 一半,所以这就是最佳长度。否则应该再计算S[1],S[1] = [4,1], 然后就只剩下S
: [3]了。
:

1 (共1页)
进入JobHunting版参与讨论
相关主题
问一道题讨论一道面试题--number of connected components
一道面试问题求助cloudera的codebility的 test
FB Onsite新题,有人能看看吗?Twitter电面面经+Online Test小结
一道linkedin常见题,我的答案对吗?攒人品,google电话面经
问一道面试题目求教google 电面 answer
[难题求助] leetcode wordsearchsodoku solver 怎么做?
word search BST 解法,大测试超时,请大家指点迷津facebook的面试题
问一个面试题一道纠结的题,狗家的。
相关话题的讨论汇总
话题: int话题: dp话题: max话题: count话题: visited