我有一个排序整数数组。给定整数N,我需要将N个最大元素彼此远离,以使它们彼此之间具有最大空间。其余元素应放在这些大项目之间。例如,10 = N = 3的数组将导致[0,5,8,2,6,9,3,7,10,4]。
public static void main(String[] args) {
int[] start = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int[] end = new int[10];
int N = 4;
int step = Math.round(start.length / N );
int y = 0;
int count = 0;
for (int i = 0; i < step; i++) {
for (int j = i; j<start.length; j = j + step) {
//System.out.println(j + " " + i);
if (count < start.length && start[count] != 0) {
end[j] = start[count];
count++;
}
}
}
System.out.println(end.toString());
}
答案 0 :(得分:1)
您有一组K
个元素。您需要分发N
个最大号码。然后:
Step := K/N
(删除剩余部分)N
最大值中取出任意数字,然后将其插入Step/2
位置。Step
距离之前插入的最大数字后插入。给予[1,2,3,4,5,6,7,8,9,10]
。所以K = 10
,N = 3
。然后是Step = 3
。因此,第一个最大值位于3/2
位置
[1,10,2,3,4,5,6,7,8,9]
然后其他2
彼此距离3
:
[1,10,2,3,9,4,5,8,6,7]
代码:
std::vector<int> Distribute(std::vector<int> aSource, int aNumber)
{
auto step = aSource.size() / aNumber; // Note integer dividing.
for (int i = 0; i < aNumber; ++i)
{
auto place = aSource.end() - i * step - step / 2;
aSource.insert(place, aSource.front());
aSource.erase(aSource.begin());
}
return aSource;
}
int main()
{
std::vector<int> vec{10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
auto res = Distribute(vec, 4);
for (auto e : res)
{
std::cout << e << ", ";
}
std::cout << std::endl;
}
输出:
6, 5, 4, 7, 3, 2, 1, 0, 8, -1, -2, -3, -4, 9, -5, -6, -7, -8, 10, -9, -10,