【发布时间】:2016-06-22 02:46:17
【问题描述】:
给定一个由 N 个数字和一个数字 X 组成的数组。我们需要在这个数组中找到一个索引 K,它将数组分成两部分(0 到 K-1,K-1 到 N-1 ) 因此:
第一部分中等于 X 的元素数 = 第二部分中不等于 X 的元素数。
例子:
A = (5, 5, 1, 2, 3, 4, 5), X = 5 Answer: K= 4 (5, 5, 1, 2) contains two X's. (3, 4, 5) contains two non X's.根据问题描述,这样的K总是存在的。解决方案需要具有 O(N) 复杂度。 O(N^2) 解决方案太简单了,但我找不到 O(N) 解决方案。
这是我目前所拥有的:
int function(int X, vector<int> &A) {
int k = 0;
vector<int> indices;
long count = A.size();
int number_of_x= 0;
for(int i=0;i<count;i++){
if(A[i]==X)
number_of_x++;
}
long part_one_x = 0;
long part_two_nonx = 0;
for(int i=0;i<count;i++){
if(A[i]==X)
part_one_x++;
part_two_nonx = (count-i) - (number_of_x - part_one_x);
if(part_one_x == part_two_nonx)
k = i;
}
return k;
}
感谢您的帮助!
【问题讨论】:
-
提示:第一次遍历数组并计算 X 的数量。然后在第二遍找到答案。
-
作业由您完成。尝试自己解决,如果遇到任何问题,请提出具体问题。
-
Jeetendra,截止日期已经过去,这是一个我无法访问的编码挑战。它只是卡在我的脑海里。 samgak,我按照你说的做了,但是第二遍我不知道该怎么做。
-
如果你统计到当前K的X个数,如果你知道数组的总数和大小,你能不能算出余数中的非X?
-
三阁,谢谢。我得到了它。在第二遍中,我不断重复数组两次。
标签: c++ arrays algorithm time-complexity