главная новое лучшее написать
3

Наша новая задача – 2425. Bitwise XOR of All Pairings решается "размышлениями на салфетке" и потом очень быстро и просто программируется.

📋 Описание задачи

Даны два массива nums1 и nums2, содержащие неотрицательные числа. Для каждой пары чисел, взятых из этих массивов, вычисляется побитовый XOR. Нужно вернуть результат XOR всех таких пар.

🧠 Идея

XOR обладает полезными свойствами:

Только если длина одного массива нечётная, элементы второго массива оказывают влияние на результат, так как они "непарные".
В итоге вклад в результат зависит от длины второго массива для каждого массива из входной пары.

😃 Детали подхода

  1. Найти длины массивов nums1 и nums2.
  2. Если длина nums2 нечётная, XOR всех элементов nums1 добавляется в результат.
  3. Если длина nums1 нечётная, XOR всех элементов nums2 добавляется в результат.
  4. Возвратить результат как итоговый XOR.

⏱️ Асимптотика

💻 Исходный код

use std::ops::BitXor;

impl Solution {
    pub fn xor_all_nums(nums1: Vec<i32>, nums2: Vec<i32>) -> i32 {
        let len_nums1 = nums1.len();
        let len_nums2 = nums2.len();

        // Initialize result as 0
        let mut result = 0;

        // If nums1 has an odd number of elements, XOR all elements of nums2
        if len_nums1 % 2 == 1 {
            result ^= nums2.into_iter().fold(0, i32::bitxor);
        }

        // If nums2 has an odd number of elements, XOR all elements of nums1
        if len_nums2 % 2 == 1 {
            result ^= nums1.into_iter().fold(0, i32::bitxor);
        }

        result
    }
}