小红书 点赞的帖子 点赞总数最大

给一个数组 表示点赞的帖子, 要求求不相连的 点赞次数最大,输出 点赞总数 和  贴子数 import java.util.*;
public class Main {
    private static int sum;
    private static int y = 0;

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n];
        //ans[i][0]存放到i时最大的点赞数;ans[i][0]存放帖子数
        int[][] ans = new int[n][2];
        ans[0][1] = 1;
        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }
        for (int i = 0; i < n; i++) {
            function(arr, i, ans);
        }
        System.out.print(ans[n - 1][0] + " ");
        System.out.print(ans[n - 1][1]);

    }
    
    public static int function(int[] a, int index, int[][] ans) {
        if (index < 0)
            return 0;
        //数组能取出最大点赞数则取
        if(ans[index][0] != 0)
            return ans[index][0];
        //index为1时单独讨论
        if (index - 1 < 0) {
            ans[index][0] = a[index];
            return a[index];
        }
        //取n1和n2中最大的,即为所求的最大点赞数
        int n1 = function(a, index - 2, ans) + a[index];
        int n2 = function(a, index - 3, ans) + a[index - 1];
        ans[index][0] = Math.max(n1, n2);
        if (index >= 2)
            if (n1 >= n2)
                //最大点赞数包含index即将index - 2所能取的最大帖数加一 
                ans[index][1] = ans[index - 2][1] + 1;
            else
                //最大点赞数不包含index即index - 1所能取的最大帖数 
                if (index == 2)
                    //index为2单独讨论因为有数组溢出
                    ans[index][1] = 1;
                else
                    ans[index][1] = ans[index - 1][1];
        else
            ans[index][1] = 1;
        return ans[index][0];
    }
}

#小红书##笔试题目#
全部评论

相关推荐

点赞 4 评论
分享
牛客网
牛客企业服务