标记Codility Java

时间:2018-09-10 10:25:00

标签: java arrays list loops

我知道这个问题已经问过几次了,但是我在寻找解释而不是解决方案。

任务如下:

给出了一个由N个整数组成的非空数组A。

峰是大于其邻居的数组元素。更准确地说,它是一个索引P,使得0 < P < N − 1A[P − 1] < A[P] > A[P + 1]

例如,以下数组A:

A[0] = 1
A[1] = 5
A[2] = 3
A[3] = 4
A[4] = 3
A[5] = 4
A[6] = 1
A[7] = 2
A[8] = 3
A[9] = 4
A[10] = 6
A[11] = 2

正好有四个峰:元素1、3、5和10。

您要去到一系列山脉,它们的相对高度由数组A表示,如下图所示。您必须选择应该携带多少个标志。目的是根据某些规则设置峰值上的最大标记数。

只能在峰上设置标志。此外,如果采用K个标记,则任何两个标记之间的距离应大于或等于K。索引PQ之间的距离为绝对值|P − Q|

例如,给定上面的数组A所表示的山脉,并以N = 12为例,

两个标志,您可以将它们设置在峰1和峰5上; 三个标志,您可以将它们设置在峰1、5和10上; 四个标志,您只能在峰1、5和10上设置三个标志。 因此,在这种情况下,您最多可以设置三个标志。

编写函数:

class Solution { 
   public int solution(int[] A);
}

给定一个N个整数的非空数组A,它返回可以在该数组的峰上设置的最大标志数。

例如,以下数组A:

A[0] = 1
A[1] = 5
A[2] = 3
A[3] = 4
A[4] = 3
A[5] = 4
A[6] = 1
A[7] = 2
A[8] = 3
A[9] = 4
A[10] = 6
A[11] = 2

该函数应返回3,如上所述。

为以下假设写出有效的算法:

N是[1..400,000]范围内的整数; 数组A的每个元素都是[0..1,000,000,000]范围内的整数。

到目前为止,我的代码:

class Solution {
 public int solution(int[] A) {
    // write your code in Java SE 8
    List <Integer> index= new ArrayList <Integer> ();
    int N=A.length;
    boolean block=false;
    int divisor=0;
    int flags=0;
    int counter=0;
    for(int i=1;i<A.length-1;i++){

        if(A[i]>A[i+1] && A[i]>A[i-1]){

            index.add(i);
        }

    }

    for(int k=N;k>=1;k--){

    if(N%k==0) {
        divisor=k;
        block=true;


    } 

我认为遍历列表中的每个索引将是更快的方法,而除数是最好的方法,因为此任务属于质数/复数课程。我只是不知道该怎么做,所以任何有外行术语解释的想法都将真正有帮助。谢谢

0 个答案:

没有答案