贪心算法解决最小集合覆盖问题

2023-10-27

AVL自平衡树

关键就是对于递归的每一步插入都要进行判断,而不是对于root节点进行判断。
ac代码

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

struct node {
	int val;
	struct node* left, * right;
};
int getHeight(node* root) {
	if (root == nullptr) return 0;
	return max(getHeight(root->left), getHeight(root->right)) + 1;
}
node* rotateRight(node* root) {
	node* t = root->left;
	root->left = t->right;
	t->right = root;
	return t;
}
node* rotateLeft(node* root) {
	node* t = root->right;
	root->right = t->left;
	t->left = root;
	return t;
}
node* rotateRightLeft(node* root) {
	root->right = rotateRight(root->right);
	return rotateLeft(root);
}
node* rotateLeftRight(node* root) {
	root->left = rotateLeft(root->left);
	return rotateRight(root);
}
node* insert(node* root, int val) {
	if (root == nullptr) {
		root = new node();
		root->val = val;
		root->left = root->right = nullptr;
	}
	else if (val < root->val) {
		root->left = insert(root->left, val);
		if (getHeight(root->left) - getHeight(root->right) == 2)
			root = val < root->left->val ? rotateRight(root) : rotateLeftRight(root);
	}
	else {
		root->right = insert(root->right, val);
		if (getHeight(root->right) - getHeight(root->left) == 2)
			root = val > root->right->val ? rotateLeft(root) : rotateRightLeft(root);
	}
	return root;
}

int main() {
	int n, val;
	cin >> n;
	node* root = nullptr;
	for (int i = 0; i < n; i++) {
		scanf("%d", &val);
		root = insert(root, val);
	}
	cout << root->val << endl;
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

贪心算法解决最小集合覆盖问题 的相关文章

随机推荐

  • libxxx_intermediates/export_includes’, needed by 解决办法

    xxx intermediates export includes needed by 解决办法 报错信息 ninja error out target product ac8257 demo obj SHARED LIBRARIES li
  • 【深度学习】【U-net】医学图像(血管)分割实验记录

    医学图像分割实验记录 U net介绍 数据集 实验记录 实验1 实验2 fail 实验3 fail 实验4 fail 实验5 fail 实验6 fail 本项目仅用于大创实验 使用pytorch编程 参考价值有限 U net介绍 这里先行挖
  • flutter 本项目做IM消息提醒的思路

    message util 监听接收到消息 container page 在最外层监听消息 如果有收到就弹出弹窗IMNoticeDialog 用converScreen封装过的 可以穿透 可以点击 conversationItem 进入 co
  • 基于MATLAB的战术手势识别功能的设计与实现

    一 课题介绍 手势识别技术是人们生活中常见的一类图像处理技术 也是目前比较火热的研究领域之一 手势识别可以用于人们生活中各种场景 比如利用手势进行电视信息交互 只需要通过手势就能实现对电视机的控制 在很多的VR游戏中 利用手势可以完成各种各
  • mptt介绍

    1 MQTT协议是由IBM开发的即时通讯协议 相比来说比较适合物联网场景的通讯协议 MQTT协议采用发布 订阅模式 所有的物联网终端都通过TCP连接到云端 云端通过主题的方式管理各个设备关注的通讯内容 负责将设备与设备之间消息的转发 2 m
  • 关于Java中对象的比较

    Java对象的比较有这三种 第一种equals 方法是对象值的比较 这是Object类提供的方法 第二种 第三种分别是实现Comparable Comparator接口 Object equals Comparable Comparator
  • 【C++】error LNK2019: 无法解析的外部符号

    转 C error LNK2019 无法解析的外部符号 错误解决方案 今天在实现类模板特例化的时候遇到一个问题 就是把类模板函数实现放到类的cpp文件中 然后在main函数中使用这个类的时候 就会出现无法解析的外部符号 函数名 xxxx 等
  • 深圳求职安全防范手册

    深圳作为中国第四大经济城市 吸引了来自全国各地的大批求职者 因为人口流动性较大 人员组成复杂 治安方面难免会出现一些问题 所以特整理这份求职安全防范手册 希望可以对准备到深圳求职或者已经在深圳求职的你提一个醒 防患于未然 毕竟出门在外 安全
  • 实现一个函数,可以左旋字符串中的k个字符。

    实现一个函数 可以左旋字符串中的k个字符 例如 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法一 一 我们先假定这串字符为ABCDE 假设左旋1次 我们可以进行如下操作 ABCDE 一开始 BBCDE 第一次 第一
  • Go语言数据结构-二叉树

    定义 二叉树是一种数据结构 它是由 n n 1 个有限节点组成一个具有层次关系的集合 根节点 最上面的节点 叶子节点 左右子节点都为nil的节点 特点 每个节点有零个或两个子节点 没有父节点的节点称为根节点 每一个非根节点有且只有一个父节点
  • C++学习记录———容器的简单整理

    1 容器的概念 容器是用来批量存储数据的集合 数据元素可以是用户自定义类型 也可以是C 预定定义类型 容器类的对象自动申请和释放内存 无需new和delete操作 容器 顺序容器 和关联容器 顺序容器 元素之间是顺序关系 元素有固定的位置
  • LaTeX技巧1:加粗、斜体

    对一般字母加粗 mathbf 对希腊字母加粗 usepackage bm bm 斜体 emph
  • github项目自荐(django项目)

    这篇文章来介绍一下我的一个GitHub项目 如果对这个项目有什么建议或者这个项目有什么bug请大家在评论区或者在Github issues给我建议 谢谢 1 首先先上GitHub项目的链接 GitHub first coding djang
  • CPU如何知道当前运行的是操作系统还是一般应用软件

    CPU如何知道当前运行的是操作系统还是一般应用软件 有赖于处理器状态的标识
  • python_if练习2:猜拳游戏

    题目要求 1 从控制台输入你要出的拳 石头 1 剪刀 2 布 3 2 电脑随即出拳 3 比较胜负 脚本内容 import random 1 从控制台输入要出的拳 player int input 请输入您要出的拳 石头1 剪刀2 布3 2
  • 使用nwjs-builder-phoenix构建跨平台桌面应用程序

    原文地址 使用nwjs builder phoenix构建跨平台桌面应用程序 BIGTREE whwtree com NW js应用自动打包的两种方式 nwjs builder phoenix 推荐 nw builder 本文主要讲述使用n
  • Centos7.9安装k8s图文详解

    Kubernetes用两种部署方式 1 kubeadm Kubeadm是一个k8s部署工具 提供kubeadm inint和 kubeadm join 用于快速部署Kubenetes集群 2 二进制部署 从github下载二进制包 手动部署
  • 服务器硬盘指示灯的显示说明

    硬盘驱动器活动指示灯 绿色 硬盘驱动器状态指示灯 绿色和琥珀色 下表针对配置了RAID 阵列的HD 指示灯不同显示对应的状态说明 驱动器状态指示灯显示方式 仅适用于 RAID 状态 每秒呈绿色闪烁两次 正在识别驱动器或准备卸下 不亮 准备插
  • 【spring mvc】Spring MVC拦截器+注解方式实现防止表单重复提交

    方法很多 先转载下 后面一个个实验 获得最优方案 原理 在新建页面中Session保存token随机码 当保存时验证 通过后删除 当再次点击保存时由于服务器端的Session中已经不存在了 所有无法验证通过 1 新建注解 java view
  • 贪心算法解决最小集合覆盖问题

    AVL自平衡树 关键就是对于递归的每一步插入都要进行判断 而不是对于root节点进行判断 ac代码 include