问题描述
小C喜欢在电子书城阅读书籍,并希望获得尽可能多的满足感。每本书的满意程度books[i]表示小C阅读这本书的评分。如果按照顺序阅读书籍,time[i]定义为阅读第i本书及之前所有书所花费的时间,即第i本书的快乐时间系数为time[i] * books[i]。小C可以按照任意顺序调整书籍的阅读顺序,以获得最大的【快乐时间】总和。
例如,给定的书籍评分是 [4, 3, 2],如果按评分升序排序来安排阅读,则小C可以获得最大的快乐时间系数。
测试样例
样例1:
输入:
books = [4, 3, 2]
输出:20
说明:选择第一天读第三本书,第二天读第二本书,第三天读第一本书,快乐时间为20,可以证明,没有其他方案获得的快乐时间比此方案更大
样例2:
输入:
books = [-1, -4, -5]
输出:0
说明:无论怎么读,最后的快乐时间均为负数,所以选择不读,快乐时间为0
样例3:
输入:
books = [-1, -8, 0, 5, -9]
输出:14
说明:选择第一天读第一本书,第二天读第三本书,第三天读第四本书,快乐时间为14,可以证明,没有其他方案获得的快乐时间比此方案更大
import java.util.Arrays;
public class Main {
public static int solution(int[] books) {
Arrays.sort(books);
int i,len=books.length-1,j,sum=0,tmp;
for(i=len;i>-1;i--){
tmp=sum;
for(j=len;j>=i;j--){
tmp+=books[j];
}
if(tmp>sum){
sum=tmp;
}
}
return sum;
}
public static void main(String[] args) {
System.out.println(solution(new int[]{4, 3, 2}) == 20);
System.out.println(solution(new int[]{-1, -4, -5}) == 0);
System.out.println(solution(new int[]{-1, -8, 0, 5, -9}) == 14);
}
}