数组和窗口-贪心算法
互联网 2021/4/8 22:55:09 次
1 import java.util.*; 2 3 public class Main { // 注意类名必须为Main 4 public static void main(String[] args) { 5 Scanner scan = new Scanner(System.in); 6 int number = Integer.parseInt(scan.nextLine()); 7 // number个测试样例 8 for (int k = 0; k < number; k++){ 9 // 输入数据 10 String str = scan.nextLine(); 11 int w = Integer.parseInt(scan.nextLine()); 12 String[] strs = str.split(" "); 13 int n = strs.length; 14 if (w > n) w = n; 15 int[] arr = new int[n]; 16 for (int i = 0; i < n; i++) 17 arr[i] = Integer.parseInt(strs[i]); 18 // 双端队列,这里只存储元素的下标 19 LinkedList<Integer> list = new LinkedList<>(); 20 // 初始化 21 list.addLast(0); 22 23 for (int i = 1; i < w; i++) { 24 while (list.size() > 0 && arr[list.getLast()] < arr[i]) 25 list.pollLast(); 26 list.addLast(i); 27 } 28 int sum = arr[list.getFirst()]; 29 // 窗口移动,增加元素arr[i],除去元素arr[i-w] 30 for (int i = w; i < n; i++) { 31 // 增加元素arr[i] 32 while (list.size() > 0 && arr[list.peekLast()] < arr[i]) 33 list.pollLast(); 34 list.addLast(i); 35 // 除去元素arr[i-w] 36 if (list.getFirst() == i-w) 37 list.pollFirst(); 38 sum += arr[list.getFirst()]; 39 } 40 System.out.println(sum); 41 } 42 scan.close(); 43 } 44 45 }

关于找一找教程网
本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[数组和窗口-贪心算法]http://www.zyiz.net/tech/detail-154069.html
您可能感兴趣的文章:
下一篇:泛型程序设计
- 2019-07-07Java编写中容易搞错的一些东西
- 2021-04-12Spring @Required 注释
- 2021-04-12Spring @Autowired 注释
- 2021-04-12Spring @Qualifier 注释
- 2021-04-12Spring JSR-250 注释
- 2021-04-12Spring 基于 Java 的配置
- 2021-04-12Spring 中的事件处理
- 2021-04-12Spring 中的自定义事件
- 2021-04-12Spring 中基于 AOP 的 XML架构
- 2021-04-12Spring 中基于 AOP 的 @AspectJ

扫描二维码或查找【程序员编程王】
可以随时随地学编程啦!
共有 条评论 网友评论