From 4f8d45391bca4a90ca5115e5c0935c577e1d4d1c Mon Sep 17 00:00:00 2001 From: Sadaf <137484958+SadafKausar2025@users.noreply.github.com> Date: Sat, 15 Jun 2024 20:47:02 +0530 Subject: [PATCH] Added Bit Manipulation and leetcode questions in DSA --- dsa/Advance/bitManipulation.md | 484 +++++++++++++++++++++++ dsa/Advance/bit_manipulation_leetcode.md | 79 ++++ dsa/Advance/image-7.png | Bin 0 -> 10930 bytes dsa/Advance/image-8.png | Bin 0 -> 11524 bytes 4 files changed, 563 insertions(+) create mode 100644 dsa/Advance/bitManipulation.md create mode 100644 dsa/Advance/bit_manipulation_leetcode.md create mode 100644 dsa/Advance/image-7.png create mode 100644 dsa/Advance/image-8.png diff --git a/dsa/Advance/bitManipulation.md b/dsa/Advance/bitManipulation.md new file mode 100644 index 000000000..00a623e7a --- /dev/null +++ b/dsa/Advance/bitManipulation.md @@ -0,0 +1,484 @@ +--- +id: 05-Bit Manipulation +title: Introduction to Bit Manipulation +sidebar_label: Bit Manipulation in DSA +tags: + - Bit Manipulation + - data-structures + - binary-tree + - intermediate + - javascript + - python + - c++ + - java + - programming + - tutorial +sidebar_position: 4 +--- + +# Introduction to Bit Manipulation + +Bit Manipulation is a technique used in a variety of problems to get the solution in an optimized way. This technique is very effective from a Competitive Programming point of view. It is all about Bitwise Operators which directly works upon binary numbers or bits of numbers that help the implementation fast. Below are the Bitwise Operators that are used: + + 1. Bitwise AND (&) + 2. Bitwise OR (|) + 3. Bitwise XOR (^) + 4. Bitwise NOT (!) + +All data in computer programs are internally stored as bits, i.e., as numbers 0 and 1. + +## Bit representation + +In programming, an n-bit integer is internally stored as a binary number that consists of n bits. For example, the C++ type int is a 32-bit type, which means that every int number consists of 32 bits. + +The int number 43 = 00000000000000000000000000101011 + +The bits in the representation are indexed from right to left. To convert a bit representation bk ···b2 b1 b0 into a number, we can use the formula +bk2k +…+ b222 + b121 + b020. + +E.g., 1·25+1·23 +1·21 +1·20 = 43. + +The bit representation of a number is either signed or unsigned. +Usually, a signed representation is used, which means that both negative and positive numbers can be represented. +A signed variable of n bits can contain any integer between -2n-1 and 2n-1 – 1 +The int type in C++ is a signed type, so an int variable can contain any integer between -231 and 231 – 1. + +The first bit in a signed representation is the sign of the number, 0 for non-negative numbers and 1 for negative numbers and the remaining n−1 bits contain the magnitude of the number. + +Two’s complement is used, which means that the opposite number of a number is calculated by first inverting all the bits in the number, and then increasing the number by one. +The bit representation of the int number −43 is 11111111111111111111111111010101 +In an unsigned representation, only non-negative numbers can be used, but the upper bound for the values is larger. +An unsigned variable of n bits can contain any integer between 0 and 2n −1. + +In C++, an unsigned int variable can contain any integer between 0 and 232 −1. +There is a connection between the representations: +A signed number −x equals an unsigned number 2n − x. +For example, the following pseudo-code snippet shows that the signed number +x = −43 equals the unsigned number y = 232 −43: + + ![alt text](image-7.png) + +If a number is larger than the upper bound of the bit representation, the number will overflow. In a signed representation, the next number after 2n-1 – 1 is -2n-1, and in an unsigned representation, the next number after 2n -1 is 0. For example, consider the following pseudo-code snippet: + + ![alt text](image-8.png) + +Initially, the value of x is 231 −1. This is the largest value that can be stored in an int variable, so the next number after 231 −1 is −231 . + +## Bitwise Operations: + +Below is the table to illustrate the result when the operation is performed using Bitwise Operators. Here 0s or 1s mean a sequence of 0 or 1 respectively. + +| Operators | Operations | Result | +| --------- | ---------- | ------ | --- | +| XOR | X **^** 0s | X | +| XOR | X **^** 1s | ~X | +| XOR | X **^** X | 0 | +| AND | X & 0s | 0 | +| AND | X & 1s | X | +| AND | X & X | X | +| OR | X | 0s | X | +| OR | X | 1s | 1s | +| OR | X | X | X | + +## Get Bit: + +This method is used to find the bit at a particular position(say i) of the given number N. The idea is to find the Bitwise AND of the given number and 2i that can be represented as (1 `<<` i). If the value return is 1 then the bit at the ith position is set. Otherwise, it is unset. + +Below is the pseudo-code for the same: + + + + + ```cpp + // Function to get the bit at the + // ith position + bool getBit(int num, int i) { + // Return true if the bit is + // set. Otherwise return false + return ((num & (1 << i)) != 0); + } + + // Driver code + #include + int main() { + int num = 5; // Binary representation: 101 + int i = 1; // Checking the 2nd bit (0-based index) + std::cout << getBit(num, i) << std::endl; // Output: 0 (false) + + i = 2; // Checking the 3rd bit (0-based index) + std::cout << getBit(num, i) << std::endl; // Output: 1 (true) + + return 0; + } + ``` + + + + ```java + public class Solution { + // Function to get the bit at the ith position + public static boolean getBit(int num, int i) { + // Return true if the bit is set. Otherwise return false + return ((num & (1 << i)) != 0); + } + + // Driver code + public static void main(String[] args) { + int num = 5; // Binary representation: 101 + int i = 1; // Checking the 2nd bit (0-based index) + System.out.println(getBit(num, i)); // Output: false + + i = 2; // Checking the 3rd bit (0-based index) + System.out.println(getBit(num, i)); // Output: true + } + } + ``` + + + + ```python + # Function to get the bit at the ith position + def getBit(num: int, i: int) -> bool: + # Return true if the bit is set. Otherwise return false + return (num & (1 << i)) != 0 + + # Driver code + if __name__ == "__main__": + num = 5 # Binary representation: 101 + i = 1 # Checking the 2nd bit (0-based index) + print(getBit(num, i)) # Output: False + + i = 2 # Checking the 3rd bit (0-based index) + print(getBit(num, i)) # Output: True + ``` + + + + ```c + #include + #include + + // Function to get the bit at the ith position + bool getBit(int num, int i) { + // Return true if the bit is set. Otherwise return false + return ((num & (1 << i)) != 0); + } + + // Driver code + int main() { + int num = 5; // Binary representation: 101 + int i = 1; // Checking the 2nd bit (0-based index) + printf("%d\n", getBit(num, i)); // Output: 0 (false) + + i = 2; // Checking the 3rd bit (0-based index) + printf("%d\n", getBit(num, i)); // Output: 1 (true) + + return 0; + } + ``` + + + + +## Set Bit: + +This method is used to set the bit at a particular position(say i) of the given number N. The idea is to update the value of the given number N to the Bitwise OR of the given number N and 2i that can be represented as (1 `<<` i). If the value return is 1 then the bit at the ith position is set. Otherwise, it is unset. + +Below is the pseudo-code for the same: + + + + + ```cpp + // Function to set the bit at the + // ith position + int setBit(int num, int i) { + // Sets the ith bit and return + // the updated value + return num | (1 << i); + } + + // Driver code + #include + int main() { + int num = 5; // Binary representation: 101 + int i = 1; // Setting the 2nd bit (0-based index) + std::cout << setBit(num, i) << std::endl; // Output: 7 (111) + + i = 0; // Setting the 1st bit (0-based index) + std::cout << setBit(num, i) << std::endl; // Output: 5 (101, unchanged) + + return 0; + } + ``` + + + + ```java + public class Solution { + // Function to set the bit at the ith position + public static int setBit(int num, int i) { + // Sets the ith bit and return + // the updated value + return num | (1 << i); + } + + // Driver code + public static void main(String[] args) { + int num = 5; // Binary representation: 101 + int i = 1; // Setting the 2nd bit (0-based index) + System.out.println(setBit(num, i)); // Output: 7 (111) + + i = 0; // Setting the 1st bit (0-based index) + System.out.println(setBit(num, i)); // Output: 5 (101, unchanged) + } + } + ``` + + + + ```python + # Function to set the bit at the ith position + def setBit(num: int, i: int) -> int: + # Sets the ith bit and return + # the updated value + return num | (1 << i) + + # Driver code + if __name__ == "__main__": + num = 5 # Binary representation: 101 + i = 1 # Setting the 2nd bit (0-based index) + print(setBit(num, i)) # Output: 7 (111) + + i = 0 # Setting the 1st bit (0-based index) + print(setBit(num, i)) # Output: 5 (101, unchanged) + ``` + + + + ```c + #include + + // Function to set the bit at the ith position + int setBit(int num, int i) { + // Sets the ith bit and return + // the updated value + return num | (1 << i); + } + + // Driver code + int main() { + int num = 5; // Binary representation: 101 + int i = 1; // Setting the 2nd bit (0-based index) + printf("%d\n", setBit(num, i)); // Output: 7 (111) + + i = 0; // Setting the 1st bit (0-based index) + printf("%d\n", setBit(num, i)); // Output: 5 (101, unchanged) + + return 0; + } + ``` + + + + +## Clear Bit: + +This method is used to clear the bit at a particular position(say i) of the given number N. The idea is to update the value of the given number N to the Bitwise AND of the given number N and the compliment of 2i that can be represented as ~(1 `<<` i). If the value return is 1 then the bit at the ith position is set. Otherwise, it is unset. + +Below is the pseudo-code for the same: + + + + + ```cpp + // Function to clear the bit at the + // ith position + int clearBit(int num, int i) { + // Create the mask for the ith + // bit unset + int mask = ~(1 << i); + + // Return the updated value + return num & mask; + } + + // Driver code + #include + int main() { + int num = 5; // Binary representation: 101 + int i = 0; // Clearing the 1st bit (0-based index) + std::cout << clearBit(num, i) << std::endl; // Output: 4 (100) + + i = 2; // Clearing the 3rd bit (0-based index) + std::cout << clearBit(num, i) << std::endl; // Output: 1 (001) + + return 0; + } + ``` + + + + ```java + public class Solution { + // Function to clear the bit at the ith position + public static int clearBit(int num, int i) { + // Create the mask for the ith + // bit unset + int mask = ~(1 << i); + + // Return the updated value + return num & mask; + } + + // Driver code + public static void main(String[] args) { + int num = 5; // Binary representation: 101 + int i = 0; // Clearing the 1st bit (0-based index) + System.out.println(clearBit(num, i)); // Output: 4 (100) + + i = 2; // Clearing the 3rd bit (0-based index) + System.out.println(clearBit(num, i)); // Output: 1 (001) + } + } + ``` + + + + ```python + # Function to clear the bit at the ith position + def clearBit(num: int, i: int) -> int: + # Create the mask for the ith + # bit unset + mask = ~(1 << i) + + # Return the updated value + return num & mask + + # Driver code + if __name__ == "__main__": + num = 5 # Binary representation: 101 + i = 0 # Clearing the 1st bit (0-based index) + print(clearBit(num, i)) # Output: 4 (100) + + i = 2 # Clearing the 3rd bit (0-based index) + print(clearBit(num, i)) # Output: 1 (001) + ``` + + + + ```c + #include + + // Function to clear the bit at the ith position + int clearBit(int num, int i) { + // Create the mask for the ith + // bit unset + int mask = ~(1 << i); + + // Return the updated value + return num & mask; + } + + // Driver code + int main() { + int num = 5; // Binary representation: 101 + int i = 0; // Clearing the 1st bit (0-based index) + printf("%d\n", clearBit(num, i)); // Output: 4 (100) + + i = 2; // Clearing the 3rd bit (0-based index) + printf("%d\n", clearBit(num, i)); // Output: 1 (001) + + return 0; + } + ``` + + + + +Below is the program that implements the above functionalities: + +// C++ program to implement all the +// above functionalities + +``` +#include +using namespace std; + +// Function to get the bit at the +// ith position +bool getBit(int num, int i) +{ +// Return true if the ith bit is +// set. Otherwise return false +return ((num & (1 << i)) != 0); +} + +// Function to set the ith bit of the +// given number num +int setBit(int num, int i) +{ +// Sets the ith bit and return +// the updated value +return num | (1 << i); +} + +// Function to clear the ith bit of +// the given number num +int clearBit(int num, int i) +{ + + // Create the mask for the ith + // bit unset + int mask = ~(1 << i); + + // Return the updated value + return num & mask; + +} + +// Driver Code +int main() +{ +// Given number N +int N = 70; + + cout << "The bit at the 3rd position from LSB is: " + << (getBit(N, 3) ? '1' : '0') + << endl; + + cout << "The value of the given number " + << "after setting the bit at " + << "LSB is: " + << setBit(N, 0) << endl; + + cout << "The value of the given number " + << "after clearing the bit at " + << "LSB is: " + << clearBit(N, 0) << endl; + + return 0; + +} +``` + +### Output + +``` + The bit at the 3rd position from LSB is: 0 + The value of the given number after setting the bit at LSB is: 71 + The value of the given number after clearing the bit at LSB is: 70 +``` + +Time Complexity: $O(1)$ +Auxiliary Space: $O(1)$ + +## Application of Bitwise Operator + +1. Bitwise operations are prominent in embedded systems, control systems, etc where memory(data transmission/data points) is still an issue. + +2. They are also useful in networking where it is important to reduce the amount of data, so booleans are packed together. Packing them together and taking them apart use bitwise operations and shift instructions. + +3. Bitwise operations are also heavily used in the compression and encryption of data. + +4. Useful in graphics programming, older GUIs are heavily dependent on bitwise operations like XOR(^) for selection highlighting and other overlays diff --git a/dsa/Advance/bit_manipulation_leetcode.md b/dsa/Advance/bit_manipulation_leetcode.md new file mode 100644 index 000000000..b7c925ee0 --- /dev/null +++ b/dsa/Advance/bit_manipulation_leetcode.md @@ -0,0 +1,79 @@ +--- +id: 05-Leetcode Bit Manipulation Practice Questions +title: Leetcode Bit Manipulation Practice Questions +sidebar_label: Leetcode Bit Manipulation Practice Questions +tags: + - Bit Manipulation + - data-structures + - binary-tree + - intermediate + - javascript + - python + - c++ + - java + - programming + - tutorial +sidebar_position: 5 +--- + +# Bit Manipulation LeetCode Questions + +1. **[Number of 1 Bits](https://leetcode.com/problems/number-of-1-bits/)** - Write a function that takes an unsigned integer and returns the number of '1' bits it has (also known as the Hamming weight). + +2. **[Power of Two](https://leetcode.com/problems/power-of-two/)** - Given an integer, write a function to determine if it is a power of two. + +3. **[Counting Bits](https://leetcode.com/problems/counting-bits/)** - Given a non negative integer number num, for every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array. + +4. **[Reverse Bits](https://leetcode.com/problems/reverse-bits/)** - Reverse bits of a given 32 bits unsigned integer. + +5. **[Single Number](https://leetcode.com/problems/single-number/)** - Given a non-empty array of integers, every element appears twice except for one. Find that single one. + +6. **[Single Number II](https://leetcode.com/problems/single-number-ii/)** - Given a non-empty array of integers, every element appears three times except for one, which appears exactly once. Find that single one. + +7. **[Single Number III](https://leetcode.com/problems/single-number-iii/)** - Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once. + +8. **[Sum of Two Integers](https://leetcode.com/problems/sum-of-two-integers/)** - Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. + +9. **[Missing Number](https://leetcode.com/problems/missing-number/)** - Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array. + +10. **[Repeated DNA Sequences](https://leetcode.com/problems/repeated-dna-sequences/)** - All DNA is composed of a series of nucleotides abbreviated as 'A', 'C', 'G', and 'T', finds all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule. + +11. **[Bitwise AND of Numbers Range](https://leetcode.com/problems/bitwise-and-of-numbers-range/)** - Given a range [m, n], return the bitwise AND of all numbers in this range, inclusive. + +12. **[UTF-8 Validation](https://leetcode.com/problems/utf-8-validation/)** - A character in UTF8 can be from 1 to 4 bytes long. Given an array of integers representing the data, return whether it is a valid utf-8 encoding. + +13. **[Total Hamming Distance](https://leetcode.com/problems/total-hamming-distance/)** - The Hamming distance between two integers is the number of positions at which the corresponding bits are different. + +14. **[Binary Watch](https://leetcode.com/problems/binary-watch/)** - A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom represent the minutes (0-59). + +15. **[Maximum XOR of Two Numbers in an Array](https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/)** - Given an array of numbers, find the maximum result of ai XOR aj, where 0 ≤ i, j < n. + +16. **[Find the Difference](https://leetcode.com/problems/find-the-difference/)** - Given two strings s and t which consist of only lowercase letters. String t is generated by random shuffling string s and then add one more letter at a random position. Find the letter that was added in t. + +17. **[Binary Number with Alternating Bits](https://leetcode.com/problems/binary-number-with-alternating-bits/)** - Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values. + +18. **[Complement of Base 10 Integer](https://leetcode.com/problems/complement-of-base-10-integer/)** - Every non-negative integer N has a binary representation. The complement of a number is the number you get when you flip every bit in its binary representation. + +19. **[Binary Gap](https://leetcode.com/problems/binary-gap/)** - Given a positive integer N, find and return the longest distance between two consecutive 1's in the binary representation of N. + +20. **[Convert Binary Number in a Linked List to Integer](https://leetcode.com/problems/convert-binary-number-in-a-linked-list-to-integer/)** - Given head which is a reference node to a singly-linked list. The value of each node in the linked list is either 0 or 1. + +21. **[XOR Operation in an Array](https://leetcode.com/problems/xor-operation-in-an-array/)** - Given an integer n and an integer start, define an array nums where nums[i] = start + 2\*i (0-indexed) and n == nums.length. Return the bitwise XOR of all elements of nums. + +22. **[Find XOR Sum of All Pairs Bitwise AND](https://leetcode.com/problems/find-xor-sum-of-all-pairs-bitwise-and/)** - Given two arrays nums1 and nums2, find the XOR sum of all pairs bitwise AND. + +23. **[Sum of All Subset XOR Totals](https://leetcode.com/problems/sum-of-all-subset-xor-totals/)** - The XOR total of an array is defined as the bitwise XOR of all its elements. + +24. **[Minimum XOR Sum of Two Arrays](https://leetcode.com/problems/minimum-xor-sum-of-two-arrays/)** - You are given two integer arrays nums1 and nums2 of length n. Return the minimum possible XOR sum of pairs of integers. + +25. **[Check If a String Contains All Binary Codes of Size K](https://leetcode.com/problems/check-if-a-string-contains-all-binary-codes-of-size-k/)** - Given a binary string s and an integer k, return true if every binary code of length k is a substring of s. + +26. **[Decode XORed Array](https://leetcode.com/problems/decode-xored-array/)** - Given an encoded array where encoded[i] = arr[i] XOR arr[i + 1], return the original array arr. + +27. **[Minimum One Bit Operations to Make Integers Zero](https://leetcode.com/problems/minimum-one-bit-operations-to-make-integers-zero/)** - Given an integer n, you must transform it into 0 using the minimum number of one bit operations you can perform. + +28. **[Maximum XOR for Each Query](https://leetcode.com/problems/maximum-xor-for-each-query/)** - You are given a sorted array and an integer, return the maximum XOR value for each query. + +29. **[Maximum Product of Splitted Binary Tree](https://leetcode.com/problems/maximum-product-of-splitted-binary-tree/)** - Given a binary tree, split the binary tree into two subtrees by removing one edge such that the product of the sums of the subtrees is maximized. + +30. **[Maximum Good People Based on Statements](https://leetcode.com/problems/maximum-good-people-based-on-statements/)** - Given a list of statements about people, return the maximum number of good people based on the statements. diff --git a/dsa/Advance/image-7.png b/dsa/Advance/image-7.png new file mode 100644 index 0000000000000000000000000000000000000000..13f05c470113e69a40f2fca2dce678888a8a8fa6 GIT binary patch literal 10930 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 literal 0 HcmV?d00001 diff --git a/dsa/Advance/image-8.png b/dsa/Advance/image-8.png new file mode 100644 index 0000000000000000000000000000000000000000..b95cd37348268328932674ef7d5baf034f93d41e GIT binary patch literal 11524 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 Ku~gpl$^Qa@{7Se0 literal 0 HcmV?d00001