একটি অ্যারে দেওয়া আছে। অ্যারের এলিমেন্টগুলো রোটেট (ঘুরিয়ে) করে সর্বাধিক ওজনযুক্ত যোগফল (weighted sum) বের করতে হবে। অ্যারে nums-এর ওজনযুক্ত যোগফল:
$$S = \sum_{i=1}^{n} i \times nums[i]$$
উদাহরণ
ইনপুট: L = [5,3,4]
আউটপুট: 26 কারণ:
- অ্যারে
[5,3,4]: যোগফল = 5 + 2×3 + 3×4 = 5 + 6 + 12 = 23 - অ্যারে
[3,4,5]: যোগফল = 3 + 2×4 + 3×5 = 3 + 8 + 15 = 26 (সর্বাধিক) - অ্যারে
[4,5,3]: যোগফল = 4 + 2×5 + 3×3 = 4 + 10 + 9 = 23
সমাধানের ধাপসমূহ
n := size of numssum_a := sum of all elements in numsans := sum of nums[i] * (i + 1) for i in range 0 to ncur_val := ansfor i in range 0 to n - 1:cur_val := cur_val - sum_a + nums[i] * nans := max(ans, cur_val)
ansরিটার্ন করুন।
পাইথন কোড
def solve(nums):
n = len(nums)
sum_a = sum(nums)
cur_val = ans = sum(nums[i] * (i + 1) for i in range(n))
for i in range(n):
cur_val = cur_val - sum_a + nums[i] * n
ans = max(ans, cur_val)
return ans
nums = [5, 3, 4]
print(solve(nums))
ইনপুট
[5,3,4]
আউটপুট
26
ব্যাখ্যা: O(n) টাইম কমপ্লেক্সিটিতে সমাধান করা হয়েছে। প্রতিটি রোটেশনের জন্য সম্পূর্ণ যোগফল রিক্যালকুলেট না করে স্মার্টলি আপডেট করা হয়েছে।