Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 通过未排序的数组,元素之间的距离_Arrays_Quicksort_Binary Search_Mergesort_Divide And Conquer - Fatal编程技术网

Arrays 通过未排序的数组,元素之间的距离

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

建议

给定一个未排序的数组和元素数,对于每个元素,如果没有数字-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(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
    ?对不起,我不能完全理解您的问题如果正确理解您的问题,您的代码和示例输出似乎在做不同的事情。请用清晰的示例进行解释