PAT-哈夫曼树(list、collection)

2023-11-10

Huffuman树(qdulq)(40 分)

Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。

给出一列数{pi}={p0, p1, …, pn-1},

用这列数构造Huffman树的过程如下:

  1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。

  2. 重复步骤1,直到{pi}中只剩下一个数。

  在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。   本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。

  例如,对于数列{pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:

  1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。

  2. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8, 9, 10},费用为10。

  3. 找到{8, 9, 10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10, 17},费用为17。

  4. 找到{10, 17}中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{27},费用为27。

  5. 现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。

输入格式:

输入的第一行包含一个正整数n(n<=100)。

接下来是n个正整数,表示p0, p1, …, pn-1,每个数不超过1000。

输出格式:

输出用这些数构造Huffman树的总费用。

输入样例:

5
5 3 8 2 9

输出样例:

59

import java.util.Scanner;  
  
public class Main {  
    public static void main(String[] args) {  
        Scanner sc = new Scanner(System.in);  
        int n = sc.nextInt();  
        int[] arr = new int[n];  
        for(int i = 0 ; i < n ; i ++){  
            arr [i]= sc.nextInt();  
        }  
        sc.close();  
        int feiyong = 0 ;  
        for(int j =0  ; j < arr.length - 1; j ++ ){  
            java.util.Arrays.sort(arr);  
            arr[j+1] = arr[j] + arr[j+1];  
            feiyong += arr[j+1];  
        }  
        System.out.println(feiyong);  
    }  
}
用List:  
import java.util.*;

public class Main{

	static List<Integer> a;
	static int sum = 0;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		a = new ArrayList<Integer>();
		int n = sc.nextInt();
		for (int i = 0; i < n; i++) {
			a.add(sc.nextInt());
		}
		Collections.sort(a);
		System.out.println(sum(a));
	}

	public static int sum(List<Integer> list) {
		if (list.size() < 2) {
			return sum + list.get(0);
		}
		int temp = list.get(0) + list.get(1);
		sum += temp;
		list.remove(0);
		list.remove(0);
		list.add(temp);
		Collections.sort(a);
		sum(a);
		return sum;
	}

}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

1、sort(Collection)方法的使用(含义:对集合进行排序)。
       例:对已知集合c进行排序?
              public class Practice {
                      public static void main(String[] args){
                                   List c = new ArrayList();
                                c.add("l");
                                c.add("o");
                               c.add("v");
                                c.add("e");
                              System.out.println(c);
                            

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PAT-哈夫曼树(list、collection) 的相关文章

随机推荐

  • 过度绘制和渲染

    最近在解过度绘制的问题单时 对过度绘制和渲染进行了简要的学习 UI优化和UI渲染 UI 优化究竟指的是什么呢 应该包含两个方面 一个是效率的提升 我们可以非常高效地把 UI 的设计图转化成应用界面 在不同并且保证 UI 界面尺寸和分辨率的手
  • JMX经验点滴

    使用Java构建的大规模分布式架构网站 为了了解整个网站中的每个节点运行状况 在考虑性能 开发速度而不考虑多开发语言支持的情况下 JMX无疑是最适合的方式 JMX Java 管理扩展 Java Management Extensions 是
  • 使用springcloud feign时 token认证

    我们在项目中使用feign进行调用时 往往需要进行身份验证 而feignclient需要按照http调用方的格式来书写 这时候呢 我们可以使用这种方式来进行加入身份验证 public class FeignConfig implements
  • tcp服务端通讯+按键发送协议

    import threading import socket import json import keyboard TCP服务器配置 HOST 0 0 0 0 PORT 8888 创建TCP服务端 server socket socket
  • kodi 下载插件失败/无法刮削

    kodi 下载插件失败 无法刮削 很有可能是被墙 或者DNS被污染 解决的方法很简单 修改host 并不是修改nas win kodi上的host 一个一个修改太麻烦了 而是在路由器上修改host 这样一来所有的设备都可以使用了 现在的路由
  • 【C++】STL初识

    目录 STL背景和定义 STL分类 STL三大分类 容器 算法 迭代器 STL六大组件 STL容器使用案例 创建容器 遍历容器 容器嵌套容器 STL背景和定义 STL是标准模板库 Standard Template Library STL
  • 基础算--简单枚举

    简单枚举 顾名思义 枚举便是依次列举出所有可能产生的结果 根据题中的条件对所得的结果进行逐一的判断 过滤掉那些不符合要求的 保留那些符合要求的 也可以称之为暴力算法 枚举结构 循环 判断语句 应用场合 在竞赛中 并不是所有问题都可以使用枚举
  • 【Vue3】SplitPane 可拖拽分隔面板组件

    1 效果图 2 组件完整代码
  • 算法笔记--最大连续1的个数Ⅲ

    leetcode题目链接 1004 最大连续1的个数 III 题目描述 给定一个二进制数组 nums 和一个整数 k 如果可以翻转最多 k 个 0 则返回 数组中连续 1 的最大个数 思路 这里可以转换思路 让题意更加明确 即 求一个最大连
  • 五十六.L1-017 到底有多二

    include
  • 【华为机试题】华为机试真题附解答(2020.9.16/c++)

    第一题题目描述 五键键盘只可以输入a ctrl c ctrl x ctrl v ctrl a 对应的功能为 a 输出到屏幕上a字母 ctrl c 复制选定内容到剪贴板 ctrl x 复制选定内容到剪贴板并且清空当前选定内容 ctrl v 将
  • Vue.js面试题整理

    一 什么是MVVM MVVM是Model View ViewModel的缩写 MVVM是一种设计思想 Model 层代表数据模型 也可以在Model中定义数据修改和操作的业务逻辑 View 代表UI 组件 它负责将数据模型转化成UI 展现出
  • 刷脸支付的产品也在慢慢的完善当中

    如今 春暖花开 万物复苏 在经历了疫情的严冬之后 相信 真正的春天即将来临 在这样的背景下 刷脸支付 这一被疫情耽误了的新的支付方式 或许将迎来一次全新的爆发 说 2019年被称为刷脸支付的元年 在很多人满怀期待刷脸支付或将在2020年进一
  • Java实现加密(一)AES加解密

    目录 1 背景知识 2 AES简介 3 AES的加密过程 AES处理单位 字节 4 Java实现 4 1 生成密钥和偏移量 4 2 AESUtil java 源码 4 3 执行结果 4 4 线上验证 1 背景知识 在密码学中 加密算法分为单
  • facebook 邀请好友

    话不多说 直接上代码了 邀请好友 public void sendFilteredChallenge final Vector
  • 多表连接查询详解

    1 1 多表连接查询的概念 由于数据库中很多数据被分散到多个数据库表中 在查询数据时就经常出现要查的数据来自多个表中 此时就必须采用多表连接查询 多表连接查询是数据库查询中常见的查询方式 多表连接查询分为内连接和外连接 1 2 内连接的概念
  • vpd安全策略的使用

    1 首先我们创建用户vpd 并给与一定的权限 create user vpd identified by 123456 grant resource connect to vpd grant execute on dbms rls to v
  • 电脑无法登录microsoft账号怎么办?

    电脑登录Microsoft账号的方法 请按以下步骤进行 打开控制面板 右键点击左下角的Windows徽标就可以看见弹出菜单有这个选项 win10系统则可以通过搜索功能直接查到控制面板 进入控制面板后把查看方式改为大图标 然后选择网络和共享中
  • 硬核!八张图搞懂 Flink 端到端精准一次处理语义 Exactly-once(深入原理,建议收藏)

    Flink 在 Flink 中需要端到端精准一次处理的位置有三个 Source 端 数据从上一阶段进入到 Flink 时 需要保证消息精准一次消费 Flink 内部端 这个我们已经了解 利用 Checkpoint 机制 把状态存盘 发生故障
  • PAT-哈夫曼树(list、collection)

    Huffuman树 qdulq 40 分 Huffman树在编码中有着广泛的应用 在这里 我们只关心Huffman树的构造过程 给出一列数 pi p0 p1 pn 1 用这列数构造Huffman树的过程如下 1 找到 pi 中最小的两个数