How to solve the question https://www.hackerrank.com/challenges/sherlock-and-cost on hackerrank?
# | User | Rating |
---|---|---|
1 | ecnerwala | 3648 |
2 | Benq | 3580 |
3 | orzdevinwang | 3570 |
4 | cnnfls_csy | 3569 |
5 | Geothermal | 3568 |
6 | tourist | 3565 |
7 | maroonrk | 3530 |
8 | Radewoosh | 3520 |
9 | Um_nik | 3481 |
10 | jiangly | 3467 |
# | User | Contrib. |
---|---|---|
1 | maomao90 | 174 |
2 | awoo | 164 |
2 | adamant | 164 |
4 | TheScrasse | 159 |
4 | nor | 159 |
6 | maroonrk | 156 |
7 | -is-this-fft- | 150 |
8 | SecondThread | 147 |
9 | orz | 146 |
10 | pajenegod | 145 |
How to solve the question https://www.hackerrank.com/challenges/sherlock-and-cost on hackerrank?
Name |
---|
Some hints:- 1. First come up with a dp with O(n*M*M) where M is the max value of B[i] i.e. 100 2. You don't need to try all values between 1 to B[idx] for some index 'idx'. Only 1 and B[idx] are enough. Now, complexity is O(n*M) 3. Since, you are only trying 1 and B[idx], you can keep a boolean for the previous value you selected. True for B[idx-1] and false for 1.
This changes complexity to O(n*2) = O(n). Final reduced state is (index, isLastValueMax) where isLastValueMax is a Boolean.