उदाहरण
public class Demo {
static int oddOccurs(int myArr[], int arrSize) {
int i;
for (i = 0; i < arrSize; i++) {
int count = 0;
for (int j = 0; j < arrSize; j++) {
if (myArr[i] == myArr[j])
count++;
}
if (count % 2 != 0)
return myArr[i];
}
return -1;
}
public static void main(String[] args) {
int myArr[] = new int[]{ 34, 56, 99, 34, 55, 99, 90, 11, 12, 11, 11, 34 };
int arrSize = myArr.length;
System.out.println("ऐरे में विषम संख्या में आने वाली संख्या है: ");
System.out.println(oddOccurs(myArr, arrSize));
}
}
आउटपुट
ऐरे में विषम संख्या में आने वाली संख्या है 34
व्याख्या: Demo क्लास में 'oddOccurs' नामक एक स्टेटिक फंक्शन होता है। यह फंक्शन इंटीजर ऐरे के माध्यम से पुनरावृति करता है, और जांचता है कि ये संख्याएं कितनी बार होती हैं। विषम संख्या जो बार-बार होती है, उसे आउटपुट के रूप में लौटाया जाता है। मुख्य फंक्शन में, एक इंटीजर ऐरे परिभाषित किया जाता है, और ऐरे की लंबाई एक वेरिएबल को असाइन की जाती है। फंक्शन को ऐरे और उसकी लंबाई को पैरामीटर के रूप में पास करके कॉल किया जाता है। प्रासंगिक संदेश कंसोल पर प्रदर्शित होता है।
एल्गोरिदम विश्लेषण:
- समय जटिलता: O(n²) - नेस्टेड लूप
- स्थान जटिलता: O(1)
- पहला विषम-घटना वाला तत्व लौटाता है
अनुकूलित O(n) समाधान - XOR दृष्टिकोण:
यदि केवल एक संख्या विषम बार आती है (बाकी सम बार):
public static int findOddOccurrence(int[] arr) {
int result = 0;
for (int num : arr) {
result ^= num; // XOR: a^a=0, a^0=a
}
return result;
}
// XOR गुण: जोड़े रद्द हो जाते हैं, विषम वाला बचा रहता है
HashMap दृष्टिकोण (सामान्य मामला):
public static int findOddOccurrenceMap(int[] arr) {
Map freq = new HashMap<>();
for (int num : arr) {
freq.put(num, freq.getOrDefault(num, 0) + 1);
}
for (Map.Entry entry : freq.entrySet()) {
if (entry.getValue() % 2 != 0) {
return entry.getKey();
}
}
return -1;
}
तुलना:
| दृष्टिकोण | समय | स्थान | शर्तें |
|---|---|---|---|
| नेस्टेड लूप | O(n²) | O(1) | कोई नहीं |
| XOR | O(n) | O(1) | केवल एक विषम घटना |
| HashMap | O(n) | O(n) | सामान्य मामला |
| सॉर्टिंग | O(n log n) | O(1) | ऐरे मॉडिफाई करता है |