2015-05-03 75 views
3

假設我有一個值爲{0,1,1,0,1,1,1}的數組列表 這裏連續序列中值爲1的最大重複次數爲3次。 我如何找到最大數量。陣列列表中同一位數的最大數量

List<String> list = new ArrayList<String>(); 

for (int i=0;i<5;i++) 
{ 
    System.out.println("Enter value"); 
    x = in.nextLine(); 

     list.add(""+x); 
} 

Map<String, Integer> countMap = new HashMap<>(); 

for (String word : list) { 
    Integer count = countMap.get(word); 
    if(count == null) { 
     count = 0; 
    } 
    countMap.put(word, (count.intValue()+1)); 
} 

這給總數相同的價值,但我需要最大的連續值。

+2

第一步:檢測連續序列。第2步:當序列結束時,與當前存儲值進行比較,看看新序列的長度是否更長 – fdsa

+0

您可以幫助一些代碼語法,以便我可以繼續前進嗎? – HunterrJ

回答

1
public static void main(String args[]) throws IOException{ 
    List<String> list = new ArrayList<String>(); 
    List<String> temp = new ArrayList<String>(); 
    InputStreamReader r=new InputStreamReader(System.in); 
    BufferedReader br=new BufferedReader(r); 


    for (int i=0;i<15;i++) 
    { 
     System.out.println("Enter value"); 
     String x=br.readLine(); 
     list.add(x); 
    } 

LinkedHashMap<String, Integer> lhm=new LinkedHashMap<String, Integer>(); 

for(String str1:list){ 
    int flag=0; 
    for(Entry<String, Integer> entry:lhm.entrySet()){ 

     if(entry.getKey().equals(str1)){ 
      flag=1; 
      break; 
     }} 
     if(flag==0){ 
      lhm.put(str1, 1); 
     } 


} 

int maxCount = 1; 
int currCount = 1; 
for (int i=1;i<list.size();++i) { 
    if (list.get(i).equals(list.get(i-1))) { 
    ++currCount; 
    if(list.size()==i+1){ 
     maxCount = Math.max(lhm.get(list.get(i)), currCount); 
     lhm.put(list.get(i), maxCount); 
    } 
    } else { 
     maxCount = Math.max(lhm.get(list.get(i-1)), currCount); 
     lhm.put(list.get(i-1), maxCount); 
    currCount = 1; 
    } 

} 


for(Entry<String, Integer> entry:lhm.entrySet()){ 
    System.out.println("Maximum Sequential occurrence of element- "+entry.getKey()+" is- "+entry.getValue());//display result 
} 


} 

上面的代碼將打印列表中所有元素的最大連續出現次數。

0

如何:

// Initialize to 1 because first element is equal to itself. 
int maxCount = 1; 
int currCount = 1; 
for (int i=1;i<list.size();++i) { 
    if (list.get(i).equals(list.get(i-1))) { 
    ++currCount; 
    } else { 
    currCount = 1; 
    } 
    maxCount = Math.max(maxCount, currCount); 
} 
return maxCount; 

這遍歷序列及其認定最長的連續序列。

+0

它取自索引1而不是0的值。 如果我將所有元素添加爲{1,1,1,1,1} 它返回4,而不是5. 如果我添加{1,1,1 ,0,0,1,1}它返回2. – HunterrJ

+0

它從1開始,因爲我訪問i-1索引處的列表。 –

+0

謝謝,我手動更新, \t \t如果(list.get(0)== 1) \t \t \t MAXCOUNT = MAXCOUNT + 1; 並得到了正確的解決方案。 感謝您的解決方案。 – HunterrJ