Arrays 通过未排序的数组,元素之间的距离
建议 给定一个未排序的数组和元素数,对于每个元素,如果没有数字-1,我必须打印它自身和数组中最远的元素(比他小)之间的元素数 例如: 输入: 10 6 10 3 9 15 输出: 31-1-1-1-1 我已经做了,但是我的教授告诉我可以做得更有效,当然我实际上做的是o(n^2)。分治?,二进制搜索 我的解决方案:Arrays 通过未排序的数组,元素之间的距离,arrays,quicksort,binary-search,mergesort,divide-and-conquer,Arrays,Quicksort,Binary Search,Mergesort,Divide And Conquer,建议 给定一个未排序的数组和元素数,对于每个元素,如果没有数字-1,我必须打印它自身和数组中最远的元素(比他小)之间的元素数 例如: 输入: 10 6 10 3 9 15 输出: 31-1-1-1-1 我已经做了,但是我的教授告诉我可以做得更有效,当然我实际上做的是o(n^2)。分治?,二进制搜索 我的解决方案: public void MedidaMolestia(int A[], int N) { int i=0, temp=0, k=N-1, j=0; for
public void MedidaMolestia(int A[], int N)
{
int i=0, temp=0, k=N-1, j=0;
for(i=0; i<N; i++)
{
temp = A[i];
for(j=N-1;j>i ; j--)
{
if(A[j]<temp)
break;
}
if(i==j)
System.out.print(-1 + " ");
else
System.out.print((j-i)-1 + " ");
}
}
public void MedidaMolestia(int A[],int N)
{
int i=0,temp=0,k=N-1,j=0;
对于(i=0;ii;j--)
{
如果(A[j]是即兴的,我可以建议使用一些动态规划进行一些渐进改进:-
使用快速排序获取数组排序版本中每个元素的索引。取O(n log n)。例如,它应该是:-
sindex = [3 1 3 0 5 2] ( since sorted array is 3 6 9 10 10 15)
您需要填充数组B,以便B[i]存储从索引最右边开始的第一次出现,该索引小于i。请执行以下操作:-
Initialize B to [N, N,...]
filledpos = N;
for j = N-1 to 0 inclusive
if(sindex[j] < filledpos) do
for i = sindex[j] to filledpos - 1 inclusive
// like if you find the 3rd smallest element fill B[4],.. B[filledpos]
B[i] = j
filledpos = sindex[j]
即兴讲,我可以建议使用一点动态规划进行一些渐进改进:-
使用快速排序获取数组排序版本中每个元素的索引。取O(n log n)。例如,它应该是:-
sindex = [3 1 3 0 5 2] ( since sorted array is 3 6 9 10 10 15)
您需要填充数组B,以便B[i]存储从索引最右边开始的第一次出现,该索引小于i。请执行以下操作:-
Initialize B to [N, N,...]
filledpos = N;
for j = N-1 to 0 inclusive
if(sindex[j] < filledpos) do
for i = sindex[j] to filledpos - 1 inclusive
// like if you find the 3rd smallest element fill B[4],.. B[filledpos]
B[i] = j
filledpos = sindex[j]
输出不应该是3 1 2-1-1
?对不起,我不能完全理解您的问题,如果正确理解您的问题,您的代码和示例输出似乎在做不同的事情。请用清晰的示例解释输出不应该是3 1 2-1-1
?对不起,我不能完全理解您的问题如果正确理解您的问题,您的代码和示例输出似乎在做不同的事情。请用清晰的示例进行解释