Optimization 代码共犯问题

Optimization 代码共犯问题,optimization,Optimization,编写一个函数: 整数解(整数K,整数A[],整数N); 给定一个整数K和一个由N个整数组成的非空零索引数组a,返回数组a的有界_片数。 如果有界_切片的数量大于100000000,则函数应返回100000000。 例如,假设: A[0]=3 A[1]=5 A[2]=7 A[3]=6 A[4]=3 函数应该返回9,如上所述。 假设: •N是[1..100000]范围内的整数; •K是[0..100000000]范围内的整数; •数组A的每个元素都是范围内的整数[−1,000,000,000..1,

编写一个函数: 整数解(整数K,整数A[],整数N); 给定一个整数K和一个由N个整数组成的非空零索引数组a,返回数组a的有界_片数。 如果有界_切片的数量大于100000000,则函数应返回100000000。 例如,假设: A[0]=3 A[1]=5 A[2]=7 A[3]=6 A[4]=3 函数应该返回9,如上所述。 假设: •N是[1..100000]范围内的整数; •K是[0..100000000]范围内的整数; •数组A的每个元素都是范围内的整数[−1,000,000,000..1,000,000,000]. 复杂性: •预计最坏情况下的时间复杂度为O(N); •预期最坏情况下的空间复杂度为O(N),超出输入存储(不计算输入参数所需的存储)。 */

我的代码没有在O(N)中运行,我想,有什么建议吗?? 导入java.util.ArrayList

公共类解决方案{

/**
 * @param args
 */

public int solution(int K, int[] A) 
{
    int numberOfSlices=0;
    ArrayList<Integer>listOfSlices=new ArrayList<Integer>();
    for(int i=0;i<A.length;i++)
    {
        for( int j=0;j<A.length;j++)
        {
            if((!listOfSlices.contains(A[i])
                &&!listOfSlices.contains(A[j]))&&(max(A[i],A[j])-min(A[i],A[j]))<=K)
            {
              numberOfSlices++;

            }
        }
          listOfSlices.add(A[i]);
    }



    return numberOfSlices;

}

/* return the max between two numbers */
public int max(int p,int q)
{
    if(p>q)
    {
        return p;
    }
    else
    {
        return q;
    }

}

/*return the min between two numbers */
public int min(int p,int q)
{
    if(p<q)
    {
        return p;
    }
    else 
    {
        return q;
    }

}
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Solution solution=new Solution();
    int[] array={3,5,7,6,3};
    System.out.println("the number of slices in the array is  "+solution.solution(2, array));

}
/**
*@param args
*/
公共int解决方案(int K,int[]A)
{
int numberOfSlices=0;
ArrayListIstofslices=新的ArrayList();

对于(int i=0;i这个问题仍然有效,因此没有人会给出太多,但我将为您指出正确的方向(或者至少,远离错误的方向)

为循环嵌套是有风险的;实际上,您基本上是在保证O(N^2)。您需要找到一种减少池的方法,而不是对每个元素再次迭代

不过,正如您所看到的,这将使许多测试用例失败。如果蛮力失败,则意味着您缺少处理某些问题的方法。如完整描述中的问题警告

因此:

1) 认识到暴力强迫的速度比要求的要慢得多,想想如何减少需要搜索的内容

2) 写出一些古怪的测试用例,找出你的代码失败的地方和原因,然后重新考虑你的解决方案。答案不会是针对每一个用例的if语句

你的代码肯定失败(6,[ 4, 5, 8,5, 1, 4,6, 8, 7,2, 2, 5 ]),它应该返回44。考虑这个测试案例。


祝你好运。

今天似乎每个人都在问同样的问题。如果你有任何建议,我们将不胜感激:)