2017-02-09 14 views
-2

Следующий код в Java языки:Найти значение, которое происходит последовательно наиболее Nunber раз в массиве

int[] array = {1,2,2,3,3,3,2,2,1}; 
int k = 2; 

Что мне нужно сделать, это найти значение (в данном случае 3), что происходит последовательно более k раз. Может быть только одно значение, которое occurs>k, и если такой величины не существует, print -1

Пояснение:
1 происходит только 1 раз подряд.
2 происходит 2 раза, но его не> k.
3 происходит 3 раза, что составляет> k. Так, может быть только один возможный ответ, вы можете остановить поиски ответа в дальнейших значений и печать 3.
Срок для кода 0.25s

Update: То, что я пытался до сих пор

import java.util.*; 
import java.lang.*; 
import java.io.*; 
class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     int[] array = {1,2,2,3,3,3,2,2,1}; 
     int k=2; 
     int result = -1; 
     for(int lom =0;lom<array.length-1;lom++){ 
      int temp = 0; 
      int lo=lom; 
      while(array[lo]==array[lom]){ 
       temp+=1; 
       if(lo<array.length){lo++;}else{break;} 
      } 
      if(temp>k){ 
       result = array[lom]; 
       break; 
      } 
     } 
     System.out.println(result); 
    } 
} 

Когда я пытаюсь решить около 10 запросов, это занимает 2 секунды. Я должен завершить его в 1. Можете ли вы предложить некоторый метод оптимизации кода, чтобы я мог исследовать его, а затем повторить попытку.

+4

Хорошо, что вы ** вы ** пробовали до сих пор? – QBrute

+2

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что он, кажется, является сокращенным и вставленным заданием без уплаты усилий. – duffymo

+0

ideone.com/e.js/ZZT3Ay –

ответ

1

Вам не нужно дважды пересечь с while петли и lo

1.) Траверса с помощью петли

2.) Если держать след последовательности элементов

3.), если изменения элемента, сброса трек

4.), когда трасса достигает выше k разорвать петлю

int[] array = {1,2,2,3,3,3,2,2,1}; 
    int k = 2; 
    // get first element 
    int element=array[0]; 

    // set tot to 1 
    int tot=1; 
     for (int i = 1; i < array.length; i++) { 
      // if values are same , increment tot 
      if (element==array[i]) { 
       tot++; 
      }else { 
       // set element to new found value and tot = 1 
       element=array[i]; 
       tot=1; 
      } 
      // when any elements exceeds the k limit 
      // print element and stop the loop 
      if (tot>k) { 
       System.out.println(array[i]); 
       break; 
      } 
     } 
     // to print -1 if tot > k never reached 
     if (!(tot>k)) { 
      System.out.println(-1); 
     }