8000 added bulbSwitcher by Vally79 · Pull Request #93 · haoel/leetcode · GitHub
[go: up one dir, main page]

Skip to content

added bulbSwitcher #93

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 28, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ LeetCode

| # | Title | Solution | Difficulty |
|---| ----- | -------- | ---------- |
|319|[Bulb Switcher](https://leetcode.com/problems/bulb-switcher/) | [C++](./algorithms/cpp/bulbSwitcher/bulbSwitcher.cpp)|Medium|
|315|[Count of Smaller Numbers After Self](https://leetcode.com/problems/count-of-smaller-numbers-after-self/) | [C++](./algorithms/cpp/countOfSmallerNumbersAfterSelf/countOfSmallerNumbersAfterSelf.cpp)|Hard|
|307|[Range Sum Query - Mutable](https://leetcode.com/problems/range-sum-query-mutable/) | [C++](./algorithms/cpp/rangeSumQuery-Immutable/rangeSumQuery-Mutable/RangeSumQueryMutable.cpp)|Medium|
|306|[Additive Number](https://leetcode.com/problems/additive-number/) | [C++](./algorithms/cpp/additiveNumber/AdditiveNumber.cpp)|Medium|
Expand Down
44 changes: 44 additions & 0 deletions algorithms/cpp/bulbSwitcher/bulbSwitcher.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// Source : https://leetcode.com/problems/bulb-switcher/
// Author : Calinescu Valentin
// Date : 2015-12-28

/***************************************************************************************
*
* There are n bulbs that are initially off. You first turn on all the bulbs. Then, you
* turn off every second bulb. On the third round, you toggle every third bulb (turning
* on if it's off or turning off if it's on). For the nth round, you only toggle the
* last bulb. Find how many bulbs are on after n rounds.
*
* Example:
*
* Given n = 3.
*
* At first, the three bulbs are [off, off, off].
* After first round, the three bulbs are [on, on, on].
* After second round, the three bulbs are [on, off, on].
* After third round, the three bulbs are [on, off, off].
*
* So you should return 1, because there is only one bulb is on.
*
***************************************************************************************/
/*
* Solution 1 - O(1)
* =========
*
* We notice that for every light bulb on position i there will be one toggle for every
* one of its divisors, given that you toggle all of the multiples of one number. The
* total number of toggles is irrelevant, because there are only 2 possible positions(on,
* off). We quickly find that 2 toggles cancel each other so given that the start position
* is always off a light bulb will be in if it has been toggled an odd number of times.
* The only integers with an odd number of divisors are perfect squares(because the square
* root only appears once, not like the other divisors that form pairs). The problem comes
* down to finding the number of perfect squares <= n. That number is the integer part of
* the square root of n.
*
*/
class Solution {
public:
int bulbSwitch(int n) {
return (int)sqrt(n);
}
};
0