Leetcode 1464 - Maximum Product of Two Elements in an Array

題目

Problem#

給你一個陣列 nums,你要挑兩個 index ij ,回傳 (nums[i]-1) * (nums[j]-1) 的最大值。

測資限制#

  • $2 \le n \le 500$
  • $1 \le val \le 10^3$

想法#

naive: 暴力 $O(n^2)$ 去掃
觀察:題目要求最大值,而最大值通常是最大和次大的數字組成,只要找到這兩個數字,算出 (nums[i]-1) * (nums[j]-1) 即可。找到數字: 可以 sort $O(n\log{n})$ 後 $O(1)$ 找到;或是紀錄最大和次大,掃一次 $O(n)$

AC Code#

  • 時間複雜度: $\mathcal{O}(n)$
  • 空間複雜度: $\mathcal{O}(1)$