Link: https://www.hackerrank.com/interview/interview-preparation-kit/dynamic-programming/challenges
1. Max Array Sum: https://www.hackerrank.com/challenges/max-array-sum/problem
Solution: Naive dynamic programming. Time = O(n), Space = O(1).
- Define
- f(i): max subarray sum from 1 to i which contains the last element.
- g(i): max subarray sum from 1 to i which does not contain the last element.
- Answer = max(f(n), g(n)).
- Recursive formula:
- f(i) = g(i - 1) + a[i]
- g(i) = max(f(i - 1), g(i - 1)).
#!/bin/python3 import math import os import sys # Complete the maxSubsetSum function below. def maxSubsetSum(arr): best_w_last, best_wo_last = 0, 0 for a in arr: best_w_last, best_wo_last = best_wo_last + a, max(best_w_last, best_wo_last) return max(best_w_last, best_wo_last) if __name__ == '__main__': fptr = open(os.environ['OUTPUT_PATH'], 'w') n = int(input()) arr = list(map(int, input().rstrip().split())) res = maxSubsetSum(arr) fptr.write(str(res) + '\n') fptr.close()
2. Candies: https://www.hackerrank.com/challenges/candies/problem
Solution: Two pass greedy algorithm. Time = O(n), Space = O(n).
#!/bin/python3 import math import os import sys # Complete the candies function below. def candies(n, r): c = [1 for i in range(n)] for i in range(1, n): if r[i] > r[i - 1]: c[i] += c[i - 1]; for i in range(n - 2, -1, -1): if r[i] > r[i + 1]: c[i] = max(c[i + 1] + 1, c[i]) return sum(c) if __name__ == '__main__': fptr = open(os.environ['OUTPUT_PATH'], 'w') n = int(input()) arr = [] for _ in range(n): arr_item = int(input()) arr.append(arr_item) result = candies(n, arr) fptr.write(str(result) + '\n') fptr.close()
3. Abbreviation: https://www.hackerrank.com/challenges/abbr/problem
4. Decibinary Numbers: https://www.hackerrank.com/challenges/decibinary-numbers/problem
沒有留言:
張貼留言