๐ŸŒ•๐ŸŒ• 396. ๆ—‹่ฝฌๅ‡ฝๆ•ฐ

ๅžไฝ›็ซฅๅญ2022ๅนด10ๆœˆ10ๆ—ฅ
  • algorithm
  • Array
  • ๆ‰พ่ง„ๅพ‹
ๅฐไบŽ 1 ๅˆ†้’Ÿ

๐ŸŒ•๐ŸŒ• 396. ๆ—‹่ฝฌๅ‡ฝๆ•ฐ

้šพๅบฆ: ๐ŸŒ•๐ŸŒ•

้—ฎ้ข˜ๆ่ฟฐ

img_61.png


่งฃๆณ•

class Solution {
    public int maxRotateFunction(int[] nums) {
        // ๆ€่ทฏ๏ผš
        // ๆ‰พ่ง„ๅพ‹
        // ไพ‹ [4, 3, 2, 6]
        // f(0) = 0*4 + 1*3 + 2*2 + 3*6
        // f(1) = 1*4 + 2*3 + 3*2 + 0*6 
        // f(2) = 2*4 + 3*3 + 0*2 + 1*6
        // f(3) = 3*4 + 0*3 + 1*2 + 2*6
        // ๅฏไปฅ็œ‹ๅ‡บ๏ผŒf(x) = f(x - 1) + sum - len*[len - x]
        // ๅ› ๆญคๅฏไปฅ้€’ๆŽจๅพ—ๅˆฐๆœ€็ปˆ็ป“ๆžœ
        int len = nums.length;
        // ้ฆ–ๅ…ˆ้ๅŽ†ไธ€้ๆฑ‚ sum
        int sum = 0;
        for(int i: nums) {
            sum += i;
        }
        // ๆฑ‚ f(0)
        int a = 0;
        for(int i = 0; i < len; i ++) {
            a += i * nums[i];
        }
        // ้€’ๆŽจ
        int res = a;
        for(int i = 1; i < len; i ++) {
            // ๆ นๆฎๅ‰ไธ€ไธช f(x - 1) ๅพ—ๅˆฐ f(x)
            int b = a + sum - len * nums[len - i];
            res = Math.max(res, b);
            a = b;
        }
        return res;
    }
}

่พ“ๅ‡บ

img_60.png

ไธŠๆฌก็ผ–่พ‘ไบŽ: 2022/10/10 ไธ‹ๅˆ8:43:48
่ดก็Œฎ่€…: liuxianzhishou