Compare commits
5 Commits
382be1e683
...
9bf1a027c0
Author | SHA1 | Date | |
---|---|---|---|
9bf1a027c0 | |||
846ddad820 | |||
6450ef0347 | |||
041a3d1c49 | |||
1a2e9cd56d |
29
0136_single-number/README.md
Normal file
29
0136_single-number/README.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
Given a **non-empty** array of integers `nums`, every element appears _twice_ except for one. Find that single one.
|
||||||
|
|
||||||
|
You must implement a solution with a linear runtime complexity and use only constant extra space.
|
||||||
|
|
||||||
|
**Example 1:**
|
||||||
|
|
||||||
|
Input: nums = [2,2,1]
|
||||||
|
Output: 1
|
||||||
|
|
||||||
|
|
||||||
|
**Example 2:**
|
||||||
|
|
||||||
|
Input: nums = [4,1,2,1,2]
|
||||||
|
Output: 4
|
||||||
|
|
||||||
|
|
||||||
|
**Example 3:**
|
||||||
|
|
||||||
|
Input: nums = [1]
|
||||||
|
Output: 1
|
||||||
|
|
||||||
|
|
||||||
|
**Constraints:**
|
||||||
|
|
||||||
|
* `1 <= nums.length <= 3 * 104`
|
||||||
|
* `-3 * 104 <= nums[i] <= 3 * 104`
|
||||||
|
* Each element in the array appears twice except for one element which appears only once.
|
||||||
|
|
||||||
|
https://leetcode.com/problems/single-number/
|
5
0136_single-number/python3/solution.py
Normal file
5
0136_single-number/python3/solution.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from functools import reduce
|
||||||
|
|
||||||
|
class Solution:
|
||||||
|
def singleNumber(self, nums: List[int]) -> int:
|
||||||
|
return reduce(lambda r, a: r ^ a, nums)
|
35
0191_number-of-1-bits/README.md
Normal file
35
0191_number-of-1-bits/README.md
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
Write a function that takes an unsigned integer and returns the number of '1' bits it has (also known as the [Hamming weight](http://en.wikipedia.org/wiki/Hamming_weight)).
|
||||||
|
|
||||||
|
**Note:**
|
||||||
|
|
||||||
|
* Note that in some languages, such as Java, there is no unsigned integer type. In this case, the input will be given as a signed integer type. It should not affect your implementation, as the integer's internal binary representation is the same, whether it is signed or unsigned.
|
||||||
|
* In Java, the compiler represents the signed integers using [2's complement notation](https://en.wikipedia.org/wiki/Two%27s_complement). Therefore, in **Example 3**, the input represents the signed integer. `-3`.
|
||||||
|
|
||||||
|
**Example 1:**
|
||||||
|
|
||||||
|
Input: n = 00000000000000000000000000001011
|
||||||
|
Output: 3
|
||||||
|
Explanation: The input binary string 00000000000000000000000000001011 has a total of three '1' bits.
|
||||||
|
|
||||||
|
|
||||||
|
**Example 2:**
|
||||||
|
|
||||||
|
Input: n = 00000000000000000000000010000000
|
||||||
|
Output: 1
|
||||||
|
Explanation: The input binary string 00000000000000000000000010000000 has a total of one '1' bit.
|
||||||
|
|
||||||
|
|
||||||
|
**Example 3:**
|
||||||
|
|
||||||
|
Input: n = 11111111111111111111111111111101
|
||||||
|
Output: 31
|
||||||
|
Explanation: The input binary string 11111111111111111111111111111101 has a total of thirty one '1' bits.
|
||||||
|
|
||||||
|
|
||||||
|
**Constraints:**
|
||||||
|
|
||||||
|
* The input must be a **binary string** of length `32`.
|
||||||
|
|
||||||
|
**Follow up:** If this function is called many times, how would you optimize it?
|
||||||
|
|
||||||
|
https://leetcode.com/problems/number-of-1-bits
|
9
0191_number-of-1-bits/python3/shift.py
Normal file
9
0191_number-of-1-bits/python3/shift.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
class Solution:
|
||||||
|
def hammingWeight(self, n: int) -> int:
|
||||||
|
count = 0
|
||||||
|
|
||||||
|
while n:
|
||||||
|
count += 1 if n & 1 == 1 else 0
|
||||||
|
n >>= 1
|
||||||
|
|
||||||
|
return count
|
9
0191_number-of-1-bits/python3/solution.py
Normal file
9
0191_number-of-1-bits/python3/solution.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
class Solution:
|
||||||
|
def hammingWeight(self, n: int) -> int:
|
||||||
|
count = 0
|
||||||
|
|
||||||
|
while n:
|
||||||
|
n = n & (n - 1)
|
||||||
|
count += 1
|
||||||
|
|
||||||
|
return count
|
38
0284_peeking-iterator/README.md
Normal file
38
0284_peeking-iterator/README.md
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
Design an iterator that supports the `peek` operation on an existing iterator in addition to the `hasNext` and the `next` operations.
|
||||||
|
|
||||||
|
Implement the `PeekingIterator` class:
|
||||||
|
|
||||||
|
* `PeekingIterator(Iterator<int> nums)` Initializes the object with the given integer iterator `iterator`.
|
||||||
|
* `int next()` Returns the next element in the array and moves the pointer to the next element.
|
||||||
|
* `boolean hasNext()` Returns `true` if there are still elements in the array.
|
||||||
|
* `int peek()` Returns the next element in the array **without** moving the pointer.
|
||||||
|
|
||||||
|
**Note:** Each language may have a different implementation of the constructor and `Iterator`, but they all support the `int next()` and `boolean hasNext()` functions.
|
||||||
|
|
||||||
|
**Example 1:**
|
||||||
|
|
||||||
|
Input
|
||||||
|
["PeekingIterator", "next", "peek", "next", "next", "hasNext"]
|
||||||
|
[[[1, 2, 3]], [], [], [], [], []]
|
||||||
|
Output
|
||||||
|
[null, 1, 2, 2, 3, false]
|
||||||
|
|
||||||
|
Explanation
|
||||||
|
PeekingIterator peekingIterator = new PeekingIterator([1, 2, 3]); // [1,2,3]
|
||||||
|
peekingIterator.next(); // return 1, the pointer moves to the next element [1,2,3].
|
||||||
|
peekingIterator.peek(); // return 2, the pointer does not move [1,2,3].
|
||||||
|
peekingIterator.next(); // return 2, the pointer moves to the next element [1,2,3]
|
||||||
|
peekingIterator.next(); // return 3, the pointer moves to the next element [1,2,3]
|
||||||
|
peekingIterator.hasNext(); // return False
|
||||||
|
|
||||||
|
|
||||||
|
**Constraints:**
|
||||||
|
|
||||||
|
* `1 <= nums.length <= 1000`
|
||||||
|
* `1 <= nums[i] <= 1000`
|
||||||
|
* All the calls to `next` and `peek` are valid.
|
||||||
|
* At most `1000` calls will be made to `next`, `hasNext`, and `peek`.
|
||||||
|
|
||||||
|
**Follow up:** How would you extend your design to be generic and work with all types, not just integer?
|
||||||
|
|
||||||
|
https://leetcode.com/problems/peeking-iterator
|
65
0284_peeking-iterator/python3/solution.py
Normal file
65
0284_peeking-iterator/python3/solution.py
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
# Below is the interface for Iterator, which is already defined for you.
|
||||||
|
#
|
||||||
|
# class Iterator:
|
||||||
|
# def __init__(self, nums):
|
||||||
|
# """
|
||||||
|
# Initializes an iterator object to the beginning of a list.
|
||||||
|
# :type nums: List[int]
|
||||||
|
# """
|
||||||
|
#
|
||||||
|
# def hasNext(self):
|
||||||
|
# """
|
||||||
|
# Returns true if the iteration has more elements.
|
||||||
|
# :rtype: bool
|
||||||
|
# """
|
||||||
|
#
|
||||||
|
# def next(self):
|
||||||
|
# """
|
||||||
|
# Returns the next element in the iteration.
|
||||||
|
# :rtype: int
|
||||||
|
# """
|
||||||
|
|
||||||
|
class PeekingIterator:
|
||||||
|
peeked = None
|
||||||
|
|
||||||
|
def __init__(self, iterator):
|
||||||
|
"""
|
||||||
|
Initialize your data structure here.
|
||||||
|
:type iterator: Iterator
|
||||||
|
"""
|
||||||
|
self.it = iterator
|
||||||
|
|
||||||
|
def peek(self):
|
||||||
|
"""
|
||||||
|
Returns the next element in the iteration without advancing the iterator.
|
||||||
|
:rtype: int
|
||||||
|
"""
|
||||||
|
if self.peeked:
|
||||||
|
return self.peeked
|
||||||
|
|
||||||
|
self.peeked = self.it.next()
|
||||||
|
return self.peeked
|
||||||
|
|
||||||
|
def next(self):
|
||||||
|
"""
|
||||||
|
:rtype: int
|
||||||
|
"""
|
||||||
|
if self.peeked:
|
||||||
|
tmp, self.peeked = self.peeked, None
|
||||||
|
return tmp
|
||||||
|
|
||||||
|
return self.it.next()
|
||||||
|
|
||||||
|
|
||||||
|
def hasNext(self):
|
||||||
|
"""
|
||||||
|
:rtype: bool
|
||||||
|
"""
|
||||||
|
return self.peeked is not None or self.it.hasNext()
|
||||||
|
|
||||||
|
|
||||||
|
# Your PeekingIterator object will be instantiated and called as such:
|
||||||
|
# iter = PeekingIterator(Iterator(nums))
|
||||||
|
# while iter.hasNext():
|
||||||
|
# val = iter.peek() # Get the next element but not advance the iterator.
|
||||||
|
# iter.next() # Should return the same value as [val].
|
33
0907_koko-eating-bananas/README.md
Normal file
33
0907_koko-eating-bananas/README.md
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
Koko loves to eat bananas. There are `n` piles of bananas, the `ith` pile has `piles[i]` bananas. The guards have gone and will come back in `h` hours.
|
||||||
|
|
||||||
|
Koko can decide her bananas-per-hour eating speed of `k`. Each hour, she chooses some pile of bananas and eats `k` bananas from that pile. If the pile has less than `k` bananas, she eats all of them instead and will not eat any more bananas during this hour.
|
||||||
|
|
||||||
|
Koko likes to eat slowly but still wants to finish eating all the bananas before the guards return.
|
||||||
|
|
||||||
|
Return _the minimum integer_ `k` _such that she can eat all the bananas within_ `h` _hours_.
|
||||||
|
|
||||||
|
**Example 1:**
|
||||||
|
|
||||||
|
Input: piles = [3,6,7,11], h = 8
|
||||||
|
Output: 4
|
||||||
|
|
||||||
|
|
||||||
|
**Example 2:**
|
||||||
|
|
||||||
|
Input: piles = [30,11,23,4,20], h = 5
|
||||||
|
Output: 30
|
||||||
|
|
||||||
|
|
||||||
|
**Example 3:**
|
||||||
|
|
||||||
|
Input: piles = [30,11,23,4,20], h = 6
|
||||||
|
Output: 23
|
||||||
|
|
||||||
|
|
||||||
|
**Constraints:**
|
||||||
|
|
||||||
|
* `1 <= piles.length <= 104`
|
||||||
|
* `piles.length <= h <= 109`
|
||||||
|
* `1 <= piles[i] <= 109`
|
||||||
|
|
||||||
|
https://leetcode.com/problems/koko-eating-bananas
|
49
0907_koko-eating-bananas/python3/solution.py
Normal file
49
0907_koko-eating-bananas/python3/solution.py
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
class Solution:
|
||||||
|
def minEatingSpeed(self, piles: List[int], h: int) -> int:
|
||||||
|
'''
|
||||||
|
NOTE: Do read the problem carefully!
|
||||||
|
|
||||||
|
Absolute min speed (k) at which Koko can eat bananas would be 1
|
||||||
|
and max speed would be max(piles). Of course, these might not
|
||||||
|
be correct and might help Koko finish eating before `h` hours.
|
||||||
|
|
||||||
|
So, we need to check each k from 1:max(piles) and figure out the
|
||||||
|
min k that lets us consume <= h
|
||||||
|
|
||||||
|
We can iterate over each k value and check or we can do binary
|
||||||
|
search and figure out least k.
|
||||||
|
'''
|
||||||
|
|
||||||
|
start, end = 1, max(piles)
|
||||||
|
k = end
|
||||||
|
|
||||||
|
while start <= end:
|
||||||
|
mid = (start + end) // 2
|
||||||
|
|
||||||
|
total = 0
|
||||||
|
for p in piles:
|
||||||
|
# If pile has 3 bananas and k = 2, then 3 / 2 = 1.5
|
||||||
|
# but we don't want fractional values, we will consider
|
||||||
|
# next greatest integer which'd be ceil(p / mid)
|
||||||
|
total += math.ceil(p / mid)
|
||||||
|
|
||||||
|
# k is valid
|
||||||
|
if total <= h:
|
||||||
|
# Update k if mid is smaller
|
||||||
|
if mid < k:
|
||||||
|
k = mid
|
||||||
|
end = mid - 1
|
||||||
|
# If mid starts to go bigger than k, then
|
||||||
|
# we can't possibly find any better results
|
||||||
|
# so just break
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
# k is too small 👉 total is large so we need
|
||||||
|
# to move `start`
|
||||||
|
else:
|
||||||
|
start = mid + 1
|
||||||
|
|
||||||
|
return k
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user