यह एक साक्षात्कार प्रश्न है जिसका मुझे जवाब देना था। वास्तव में एक दोस्त वास्तव में लेकिन उसने मुझसे पूछा और मुझे जवाब भी नहीं पता था। इसलिए मैं यहां पूछ रहा हूं:केवल 8 तुलनाओं के साथ 8 संख्याओं की सरणी में सबसे छोटा और दूसरा सबसे छोटा नंबर खोजें
8 पूर्णांकों की एक श्रृंखला को देखते हुए, केवल 9 तुलनाओं का उपयोग करके सबसे छोटा और दूसरा सबसे छोटा पूर्णांक ढूंढें। अधिक विशेष रूप से n+log(n)-2
समय में।
मुझे यकीन है कि आप केवल 9 तुलनाओं का उपयोग करके इसे कैसे कर सकते हैं। यह कितना करीब आ गया है। (10 तुलना)
public class Comp {
static int[] nums = new int[]{9, 4, 5, 3, 2, 7, 6, 1};
static int compcount = 0;
//int[] is nums[] array
public static int[] twoLeast(int[] a){
int min1 = a[0]; //Prospective lowest number
int min2 = a[1]; //Prospective second lowest number
if(isLessThan(min2, min1)){
min1 = a[1];
min2 = a[0];
}
for(int i=2; i<a.length;i++){
if(isLessThan(a[i], min1)){
min2 = min1;
min1 = a[i];
}else if(isLessThan(a[i], min2)){
min2 = a[i];
}
}
return new int[]{min1, min2};
}
public static boolean isLessThan(int num1, int num2){
compcount++;
return num1 < num2;
}
}
यहाँ मैं एक समारोह isLessThan()
तुलना की संख्या का ट्रैक रखने के लिए है। फिर से, यह 10 तुलना करता है। 9 तुलनाओं में इसे कैसे करना संभव है। या n+log(n)-2
समय में?
पुनश्च: मैं यह जावा में लागू है, लेकिन यह किसी भी
हाय, मुझे आपकी समानता पसंद है हालांकि संख्याएं मुझे दूसरे भाग में भ्रमित कर रही हैं, फिर दूसरा सबसे अच्छा ए 4, ए 12 या ए 5678 होगा। 'आपको ए 4, ए 12, ए 5678' कैसे मिलेगा क्षमा करें अगर मैं भी पूछ रहा हूं बहुत – Krimson
बाइनरी पेड़ के रूप में कल्पना करना आसान है। संख्या क्रमशः जोड़े में हैं (3) प्रतिद्वंद्वी के रूप में। यदि (3) सबसे अच्छा है, तो खेले गए गेम (ए 3, ए 4), (ए 12, ए 34) और (ए 1234, ए 5678) हैं। इसलिए विरोधियों ए 4, ए 12 और ए 5678 हैं। – user1952500