Merge pull request #104 from TheAlgorithms/vbrazo-patch-1

Power of two: bitwise approach
This commit is contained in:
Vitor Oliveira 2021-03-21 10:40:24 -07:00 committed by GitHub
commit ceef771b0b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 77 additions and 6 deletions

View file

@ -1,4 +1,7 @@
## Bit Manipulation
* [Power Of Two](https://github.com/TheAlgorithms/Ruby/blob/master/bit_manipulation/power_of_two.rb)
## Ciphers
* [Merkle Hellman Cryptosystem](https://github.com/TheAlgorithms/Ruby/blob/master/ciphers/merkle_hellman_cryptosystem.rb)

View file

@ -0,0 +1,68 @@
# Power of 2
#
# Given an integer n, return true if it is a power of two. Otherwise, return false.
#
# An integer n is a power of two, if there exists an integer x such that n == 2^x.
#
# Example 1:
# Input: n = 1
# Output: true
# Explanation: 2^0 = 1
#
# Example 2:
# Input: n = 16
# Output: true
# Explanation: 2^4 = 16
#
# Example 3:
# Input: n = 3
# Output: false
#
# Example 4:
# Input: n = 4
# Output: true
#
# Example 5:
# Input: n = 5
# Output: false
#
# Constraints: -231 <= n <= 231 - 1
# @param {Integer} n
# @return {Boolean}
#
#
# Approach 1: Bitwise operators: Turn off the Rightmost 1-bit
#
# Note that there are two ways of solving this problem via bitwise operations:
# 1. How to get / isolate the rightmost 1-bit: x & (-x).
# 2. How to turn off (= set to 0) the rightmost 1-bit: x & (x - 1).
# In this approach, we're reproducing item 2.
# Complexity Analysis
#
# Time complexity: O(1).
# Space complexity: O(1).
def is_power_of_two(n)
return false if n < 1
n & (n - 1) == 0
end
n = 1
# Output: true
puts is_power_of_two(n)
n = 16
# Output: true
puts is_power_of_two(n)
n = 3
# Output: false
puts is_power_of_two(n)
n = 4
# Output: true
puts is_power_of_two(n)
n = 5
# Output: false
puts is_power_of_two(n)

View file

@ -33,15 +33,15 @@
# Approach 1: Recursion
#
# Time Complexity: O(1)
# Time Complexity: O(logn)
#
def is_power_of_two(n)
if n == 1
return true
elsif n%2 == 0
is_power_of_two(n/2)
true
elsif n % 2 == 0
is_power_of_two(n / 2)
else
return false
false
end
end
@ -113,4 +113,4 @@ n = 4
puts is_power_of_two(n)
n = 5
# Output: false
puts is_power_of_two(n)
puts is_power_of_two(n)