#practiceLinkDiv { العرض: لا شيء! مهم؛ }نظرا لمجموعة من الأعداد الصحيحة. ابحث عن الزوج في مصفوفة تحتوي على الحد الأدنى من قيمة XOR.
أمثلة :
Input : arr[] = {9 5 3} Output : 6 All pair with xor value (9 ^ 5) => 12 (5 ^ 3) => 6 (9 ^ 3) => 10. Minimum XOR value is 6 Input : arr[] = {1 2 3 4 5} Output : 1 Recommended Practice الحد الأدنى لزوج قيمة XOR جربه! أ حل بسيط هو إنشاء جميع أزواج المصفوفة المحددة وحساب قيم XOR الخاصة بها. أخيرًا قم بإرجاع الحد الأدنى لقيمة XOR. يأخذ هذا الحل O(n2) وقت.
الذكاء الاصطناعي والوكلاء الأذكياء
تطبيق:
C++// C++ program to find minimum XOR value in an array. #include using namespace std; // Returns minimum xor value of pair in arr[0..n-1] int minXOR(int arr[] int n) { int min_xor = INT_MAX; // Initialize result // Generate all pair of given array for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) // update minimum xor value if required min_xor = min(min_xor arr[i] ^ arr[j]); return min_xor; } // Driver program int main() { int arr[] = { 9 5 3 }; int n = sizeof(arr) / sizeof(arr[0]); cout << minXOR(arr n) << endl; return 0; }
Java // Java program to find minimum XOR value in an array. class GFG { // Returns minimum xor value of pair in arr[0..n-1] static int minXOR(int arr[] int n) { int min_xor = Integer.MAX_VALUE; // Initialize result // Generate all pair of given array for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) // update minimum xor value if required min_xor = Math.min(min_xor arr[i] ^ arr[j]); return min_xor; } // Driver program public static void main(String args[]) { int arr[] = { 9 5 3 }; int n = arr.length; System.out.println(minXOR(arr n)); } } // This code is contributed by Sumit Ghosh
Python3 # Python program to find minimum # XOR value in an array. # Function to find minimum XOR pair def minXOR(arr n): # Sort given array arr.sort(); min_xor = 999999 val = 0 # calculate min xor of # consecutive pairs for i in range (0 n-1): for j in range (i+1 n-1): # update minimum xor value # if required val = arr[i] ^ arr[j] min_xor = min(min_xor val) return min_xor # Driver program arr = [ 9 5 3 ] n = len(arr) print(minXOR(arr n)) # This code is contributed by Sam007.
C# // C# program to find minimum // XOR value in an array. using System; class GFG { // Returns minimum xor value of // pair in arr[0..n-1] static int minXOR(int[] arr int n) { // Initialize result int min_xor = int.MaxValue; // Generate all pair of given array for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) // update minimum xor value if required min_xor = Math.Min(min_xor arr[i] ^ arr[j]); return min_xor; } // Driver program public static void Main() { int[] arr = { 9 5 3 }; int n = arr.Length; Console.WriteLine(minXOR(arr n)); } } // This code is contributed by Sam007
PHP // PHP program to find minimum // XOR value in an array. // Returns minimum xor value // of pair in arr[0..n-1] function minXOR($arr $n) { // Initialize result $min_xor = PHP_INT_MAX; // Generate all pair of given array for ( $i = 0; $i < $n; $i++) for ( $j = $i + 1; $j < $n; $j++) // update minimum xor // value if required $min_xor = min($min_xor $arr[$i] ^ $arr[$j]); return $min_xor; } // Driver Code $arr = array(9 5 3); $n = count($arr); echo minXOR($arr $n); // This code is contributed by anuj_67. ?> JavaScript <script> // Javascript program to find // minimum XOR value in an array. // Returns minimum xor value of pair in arr[0..n-1] function minXOR(arr n) { // Initialize result let min_xor = Number.MAX_VALUE; // Generate all pair of given array for (let i = 0; i < n; i++) for (let j = i + 1; j < n; j++) // update minimum xor value if required min_xor = Math.min(min_xor arr[i] ^ arr[j]); return min_xor; } // Driver program let arr = [ 9 5 3 ]; let n = arr.length; document.write(minXOR(arr n)); </script>
الإخراج
6
تعقيد الفضاء: O(1)
ان حل فعال يمكن حل هذه المشكلة في وقت O(nlogn).
كيفية فتح التطبيقات المخفية على الاندرويد
الخوارزمية:
- فرز المصفوفة المحددة
- اجتياز والتحقق من XOR لكل زوج متتالي
فيما يلي تنفيذ النهج أعلاه:
C++#include using namespace std; // Function to find minimum XOR pair int minXOR(int arr[] int n) { // Sort given array sort(arr arr + n); int minXor = INT_MAX; int val = 0; // calculate min xor of consecutive pairs for (int i = 0; i < n - 1; i++) { val = arr[i] ^ arr[i + 1]; minXor = min(minXor val); } return minXor; } // Driver program int main() { int arr[] = { 9 5 3 }; int n = sizeof(arr) / sizeof(arr[0]); cout << minXOR(arr n) << endl; return 0; }
Java import java.util.Arrays; class GFG { // Function to find minimum XOR pair static int minXOR(int arr[] int n) { // Sort given array Arrays.parallelSort(arr); int minXor = Integer.MAX_VALUE; int val = 0; // calculate min xor of consecutive pairs for (int i = 0; i < n - 1; i++) { val = arr[i] ^ arr[i + 1]; minXor = Math.min(minXor val); } return minXor; } // Driver program public static void main(String args[]) { int arr[] = { 9 5 3 }; int n = arr.length; System.out.println(minXOR(arr n)); } } // This code is contributed by Sumit Ghosh
Python3 import sys # Function to find minimum XOR pair def minXOR(arr n): # Sort given array arr.sort() minXor = int(sys.float_info.max) val = 0 # calculate min xor of consecutive pairs for i in range(0n-1): val = arr[i] ^ arr[i + 1]; minXor = min(minXor val); return minXor # Driver program arr = [9 5 3] n = len(arr) print(minXOR(arr n)) # This code is contributed by Sam007.
C# // C# program to find minimum // XOR value in an array. using System; class GFG { // Function to find minimum XOR pair static int minXOR(int[] arr int n) { // Sort given array Array.Sort(arr); int minXor = int.MaxValue; int val = 0; // calculate min xor of consecutive pairs for (int i = 0; i < n - 1; i++) { val = arr[i] ^ arr[i + 1]; minXor = Math.Min(minXor val); } return minXor; } // Driver program public static void Main() { int[] arr = { 9 5 3 }; int n = arr.Length; Console.WriteLine(minXOR(arr n)); } } // This code is contributed by Sam007
PHP // Function to find minimum XOR pair function minXOR($arr $n) { // Sort given array sort($arr); $minXor = PHP_INT_MAX; $val = 0; // calculate min xor // of consecutive pairs for ($i = 0; $i < $n - 1; $i++) { $val = $arr[$i] ^ $arr[$i + 1]; $minXor = min($minXor $val); } return $minXor; } // Driver Code $arr = array(9 5 3); $n = count($arr); echo minXOR($arr $n); // This code is contributed by Smitha. ?> JavaScript <script> // Function to find minimum XOR pair function minXOR(arr n) { // Sort given array arr.sort(); let minXor = Number.MAX_VALUE; let val = 0; // calculate min xor of consecutive pairs for (let i = 0; i < n - 1; i++) { val = arr[i] ^ arr[i + 1]; minXor = Math.min(minXor val); } return minXor; } // Driver program let arr = [ 9 5 3 ]; let n = arr.length; document.write(minXOR(arr n)); </script>
الإخراج
6
تعقيد الوقت: O(N*logN)
تعقيد الفضاء: O(1)
المزيد حل فعال يمكن حل المشكلة المذكورة أعلاه في زمن O(n) بافتراض أن الأعداد الصحيحة تأخذ عددًا ثابتًا من البتات لتخزينها. الفكرة هي استخدام بنية بيانات Trie.
الخوارزمية:
- قم بإنشاء محاولة فارغة. تحتوي كل عقدة من المحاولة على طفلين لـ 0 و1 بت.
- تهيئة min_xor = INT_MAX أدخل arr[0] في المحاولة
- اجتياز جميع عناصر المصفوفة واحدًا تلو الآخر بدءًا من الثانية.
- ابحث أولاً عن الحد الأدنى لقيمة فرق الرهان في المحاولة
- قم بإجراء xor للعنصر الحالي مع الحد الأدنى من فرق setbit لتلك القيمة
- قم بتحديث قيمة min_xor إذا لزم الأمر
- أدخل عنصر الصفيف الحالي في المحاولة
- إرجاع min_xor
فيما يلي تنفيذ الخوارزمية المذكورة أعلاه.
مجموعة جافا الديناميكيةC++
// C++ program to find minimum XOR value in an array. #include using namespace std; #define INT_SIZE 32 // A Trie Node struct TrieNode { int value; // used in leaf node TrieNode* Child[2]; }; // Utility function to create a new Trie node TrieNode* getNode() { TrieNode* newNode = new TrieNode; newNode->value = 0; newNode->Child[0] = newNode->Child[1] = NULL; return newNode; } // utility function insert new key in trie void insert(TrieNode* root int key) { TrieNode* temp = root; // start from the most significant bit insert all // bit of key one-by-one into trie for (int i = INT_SIZE - 1; i >= 0; i--) { // Find current bit in given prefix bool current_bit = (key & (1 << i)); // Add a new Node into trie if (temp->Child[current_bit] == NULL) temp->Child[current_bit] = getNode(); temp = temp->Child[current_bit]; } // store value at leafNode temp->value = key; } // Returns minimum XOR value of an integer inserted // in Trie and given key. int minXORUtil(TrieNode* root int key) { TrieNode* temp = root; for (int i = INT_SIZE - 1; i >= 0; i--) { // Find current bit in given prefix bool current_bit = (key & (1 << i)); // Traversal Trie look for prefix that has // same bit if (temp->Child[current_bit] != NULL) temp = temp->Child[current_bit]; // if there is no same bit.then looking for // opposite bit else if (temp->Child[1 - current_bit] != NULL) temp = temp->Child[1 - current_bit]; } // return xor value of minimum bit difference value // so we get minimum xor value return key ^ temp->value; } // Returns minimum xor value of pair in arr[0..n-1] int minXOR(int arr[] int n) { int min_xor = INT_MAX; // Initialize result // create a True and insert first element in it TrieNode* root = getNode(); insert(root arr[0]); // Traverse all array element and find minimum xor // for every element for (int i = 1; i < n; i++) { // Find minimum XOR value of current element with // previous elements inserted in Trie min_xor = min(min_xor minXORUtil(root arr[i])); // insert current array value into Trie insert(root arr[i]); } return min_xor; } // Driver code int main() { int arr[] = { 9 5 3 }; int n = sizeof(arr) / sizeof(arr[0]); cout << minXOR(arr n) << endl; return 0; }
Java // Java program to find minimum XOR value in an array. class GFG { static final int INT_SIZE = 32; // A Trie Node static class TrieNode { int value; // used in leaf node TrieNode[] Child = new TrieNode[2]; public TrieNode() { value = 0; Child[0] = null; Child[1] = null; } } static TrieNode root; // utility function insert new key in trie static void insert(int key) { TrieNode temp = root; // start from the most significant bit insert all // bit of key one-by-one into trie for (int i = INT_SIZE - 1; i >= 0; i--) { // Find current bit in given prefix int current_bit = (key & (1 << i)) >= 1 ? 1 : 0; // Add a new Node into trie if (temp != null && temp.Child[current_bit] == null) temp.Child[current_bit] = new TrieNode(); temp = temp.Child[current_bit]; } // store value at leafNode temp.value = key; } // Returns minimum XOR value of an integer inserted // in Trie and given key. static int minXORUtil(int key) { TrieNode temp = root; for (int i = INT_SIZE - 1; i >= 0; i--) { // Find current bit in given prefix int current_bit = (key & (1 << i)) >= 1 ? 1 : 0; // Traversal Trie look for prefix that has // same bit if (temp.Child[current_bit] != null) temp = temp.Child[current_bit]; // if there is no same bit.then looking for // opposite bit else if (temp.Child[1 - current_bit] != null) temp = temp.Child[1 - current_bit]; } // return xor value of minimum bit difference value // so we get minimum xor value return key ^ temp.value; } // Returns minimum xor value of pair in arr[0..n-1] static int minXOR(int arr[] int n) { int min_xor = Integer.MAX_VALUE; // Initialize result // create a True and insert first element in it root = new TrieNode(); insert(arr[0]); // Traverse all array element and find minimum xor // for every element for (int i = 1; i < n; i++) { // Find minimum XOR value of current element with // previous elements inserted in Trie min_xor = Math.min(min_xor minXORUtil(arr[i])); // insert current array value into Trie insert(arr[i]); } return min_xor; } // Driver code public static void main(String args[]) { int arr[] = { 9 5 3 }; int n = arr.length; System.out.println(minXOR(arr n)); } } // This code is contributed by Sumit Ghosh
Python # class for the basic Trie Node class TrieNode: def __init__(self): # Child array with 0 and 1 self.child = [None]*2 # meant for the lead Node self.value = None class Trie: def __init__(self): # initialise the root Node self.root = self.getNode() def getNode(self): # get a new Trie Node return TrieNode() # inserts a new element def insert(selfkey): temp = self.root # 32 bit valued binary digit for i in range(31-1-1): # finding the bit at ith position curr = (key>>i)&(1) # if the child is None create one if(temp.child[curr] is None): temp.child[curr] = self.getNode() temp = temp.child[curr] # add value to the leaf node temp.value = key # traverse the trie and xor with the most similar element def xorUtil(selfkey): temp = self.root # 32 bit valued binary digit for i in range(31-1-1): # finding the bit at ith position curr = (key>>i)&1 # traverse for the same bit if(temp.child[curr] is not None): temp = temp.child[curr] # traverse if the same bit is not set in trie elif (temp.child[1-curr] is not None): temp = temp.child[1-curr] # return with the xor of the value return temp.value^key def minXor(arr): # set m to a large number m = 2**30 # initialize Trie trie = Trie() # insert the first element trie.insert(arr[0]) # for each element in the array for i in range(1len(arr)): # find the minimum xor value m = min(mtrie.xorUtil(arr[i])) # insert the new element trie.insert(arr[i]) return m # Driver Code if __name__=='__main__': sample = [953] print(minXor(sample)) #code contributed by Shushant Kumar
C# // Include namespace system using System; // C# program to find minimum XOR value in an array. public class GFG { public const int INT_SIZE = 32; // A Trie Node public class TrieNode { public int value; // used in leaf node public TrieNode[] Child = new TrieNode[2]; public TrieNode() { this.value = 0; this.Child[0] = null; this.Child[1] = null; } } public static TrieNode root; // utility function insert new key in trie public static void insert(int key) { var temp = root; // start from the most significant bit insert all // bit of key one-by-one into trie for (int i = GFG.INT_SIZE - 1; i >= 0; i--) { // Find current bit in given prefix var current_bit = (key & (1 << i)) >= 1 ? 1 : 0; // Add a new Node into trie if (temp != null && temp.Child[current_bit] == null) { temp.Child[current_bit] = new TrieNode(); } temp = temp.Child[current_bit]; } // store value at leafNode temp.value = key; } // Returns minimum XOR value of an integer inserted // in Trie and given key. public static int minXORUtil(int key) { var temp = root; for (int i = GFG.INT_SIZE - 1; i >= 0; i--) { // Find current bit in given prefix var current_bit = (key & (1 << i)) >= 1 ? 1 : 0; // Traversal Trie look for prefix that has // same bit if (temp.Child[current_bit] != null) { temp = temp.Child[current_bit]; } else if (temp.Child[1 - current_bit] != null) { temp = temp.Child[1 - current_bit]; } } // return xor value of minimum bit difference value // so we get minimum xor value return key ^ temp.value; } // Returns minimum xor value of pair in arr[0..n-1] public static int minXOR(int[] arr int n) { var min_xor = int.MaxValue; // Initialize result // create a True and insert first element in it root = new TrieNode(); GFG.insert(arr[0]); // Traverse all array element and find minimum xor // for every element for (int i = 1; i < n; i++) { // Find minimum XOR value of current element with // previous elements inserted in Trie min_xor = Math.Min(min_xorGFG.minXORUtil(arr[i])); // insert current array value into Trie GFG.insert(arr[i]); } return min_xor; } // Driver code public static void Main(String[] args) { int[] arr = {9 5 3}; var n = arr.Length; Console.WriteLine(GFG.minXOR(arr n)); } } // This code is contributed by aadityaburujwale.
JavaScript class TrieNode { constructor() { this.child = new Array(2); this.value = null; } } class Trie { constructor() { this.root = this.getNode(); } getNode() { return new TrieNode(); } insert(key) { let temp = this.root; for (let i = 31; i >= 0; i--) { let curr = (key >> i) & 1; if (!temp.child[curr]) temp.child[curr] = this.getNode(); temp = temp.child[curr]; } temp.value = key; } xorUtil(key) { let temp = this.root; for (let i = 31; i >= 0; i--) { let curr = (key >> i) & 1; if (temp.child[curr]) temp = temp.child[curr]; else if (temp.child[1 - curr]) temp = temp.child[1 - curr]; } return temp.value ^ key; } } function minXor(arr) { let m = 2 ** 30; let trie = new Trie(); trie.insert(arr[0]); for (let i = 1; i < arr.length; i++) { m = Math.min(m trie.xorUtil(arr[i])); trie.insert(arr[i]); } return m; } if (typeof module !== 'undefined') { module.exports = { minXor: minXor }; } console.log(minXor([9 5 3])); // This code is contributed by akashish__
الإخراج
6
تعقيد الوقت O(ن)
تعقيد الفضاء: O(n*INT_SIZE)
إنشاء اختبار