Сложность: medium
Если задан целочисленный массив arr, верните количество различных побитовых ИЛИ всех непустых подмассивов arr. Побитовое ИЛИ подмассива - это побитовое ИЛИ каждого целого числа в подмассиве. Побитовым ИЛИ подмассива одного целого числа является это целое число. Подмассив - это непрерывная непустая последовательность элементов в массиве.
Пример:
Input: arr = [0]
Output: 1
👨💻 Алгоритм:
1⃣Создать множество для хранения уникальных результатов побитового ИЛИ.
2⃣Для каждого элемента массива, вычислить побитовое ИЛИ всех подмассивов, начинающихся с этого элемента.
Добавить результат каждого вычисления в множество.
3⃣Вернуть размер множества.
😎 Решение:
using System;
using System.Collections.Generic;
public class Solution {
public int SubarrayBitwiseORs(int[] arr) {
HashSet<int> result = new HashSet<int>();
HashSet<int> current = new HashSet<int>();
foreach (int num in arr) {
HashSet<int> next = new HashSet<int> { num };
foreach (int x in current) {
next.Add(x | num);
}
current = next;
result.UnionWith(current);
}
return result.Count;
}
}
Ставь 👍 и забирай 📚 Базу знаний