/ / सरणी का मोड ढूँढना? - सरणियों, छोरों, लूप के लिए

एक सरणी के मोड ढूँढना? - सरणी, लूप, लूप के लिए

मुझे अपने कोड से परेशानी हो रही है क्योंकि यह "सही ढंग से छपाई नहीं कर रहा है।"

उदाहरण के लिए, तत्वों {4,4,4,5,5} के साथ एक सरणी, मोड को 4 के बजाय 5 के रूप में प्रिंट करता है। वह क्यों है?

public static int mode(int[] numbers) {
int winner = 0;


for(int i=1; i<numbers.length; i++){
winner = numbers[0];
if ( occr(numbers,numbers[i]) == occr(numbers,numbers[i-1]) ){
winner = numbers[i];}

else if( occr(numbers,numbers[i]) > occr(numbers,numbers[i-1]) ){
winner = numbers[i];}

else if( occr(numbers,numbers[i]) < occr(numbers,numbers[i-1]) ){
winner = numbers[i-1];}
}
return winner;
}



public static int occr(int[] numbers, int x){
int counter = 0;

for(int i = 0; i < numbers.length; i++){
if(numbers[i] == x){
counter++; }
}
return counter;
}

उत्तर:

जवाब के लिए 0 № 1

आपके कोड में तर्क गलत है।

लूप के लिए आपके प्रत्येक पुनरावृत्ति i पर, आप विजेता को केवल संख्याओं [i], संख्याओं [i-1] या संख्याओं [0] के रूप में सेट करते हैं। यह गलत है, क्योंकि आपको अपने विजेता चर का संरक्षण करना चाहिए।

आप भी ऑस्कर फ़ंक्शन के लिए बहुत सारी अनावश्यक कॉल करते हैं। आपको सरणी के भीतर प्रत्येक इंडेक्स के लिए केवल एक बार ऑस्कर फ़ंक्शन को कॉल करने की आवश्यकता है।

int winner = numbers[0];
for (int i = 1; i < numbers.length; i++){
int value = occr(numbers, numbers[i]);
if(value > winner)){
winner = value;
}
}
return winner;