算法-找出N个数组的共同元素

一、代码与执行结果

财经新闻是大众了解金融事件的重要渠道,现有N位编辑,分别对K篇新闻进行专业的编辑与排版。需要您找出被这N位编辑共同编辑过的新闻,并根据这些新闻ID升序排列返回一个数组。

在这里插入图片描述

import random# 查找编辑共同处理的新闻id
def find_common_news(N, K, news_ids):# 使用集合的交集操作找出被所有编辑共同编辑过的新闻common_news_set = set(news_ids[0]) # 时间 O(k)   # 空间 O(N)for i in range(1, N):  # O(N*K)common_news_set.intersection_update(news_ids[i]) # 返回升序排列的结果return sorted(list(common_news_set)) # O(M * log(M)) 排序算法是 Timsort#  O(N * K + M * log(M))# 生成模拟数据, 作为find_common_news的输入
def generate_random_lists(m=8, N=10, K=60):# 第1步:生成这些编辑们处理的新闻中一定重复的新闻idlists = random.sample(range(1, K+1), m)print('期望输出: ',sorted(lists)) # 第2步:生成编辑们分别处理的新闻个数lsts2 = [random.randint(1, K) for _ in range(N)]# print(lsts2)# 第3步:生成这8个编辑各自处理的新闻中可能不重复的新闻idresult = []for num in lsts2:rand_nums = [random.randint(1, K) for _ in range(num)]result.append(rand_nums)# print(result) # 第4步:将可能不重复部分列表与重复列表合并, 得到每个编辑处理的新闻id列表模拟数据merged_result = []for sublist in result:# 注意:可能不重复部分列表 merged_list = list(set(sublist + lists))random.shuffle(merged_list) # 防止自动排序, 打乱处理merged_result.append(merged_list)return merged_result # 输出10个编辑分别处理的新闻idif __name__ == "__main__":# 构造数据m, N, K = 8, 10, 60 # m为编辑们共同处理的新闻个数merged_result = generate_random_lists(m, N, K) # 生成编辑们各自处理的新闻id列表print('输入: ', merged_result)print("实际输出: ",find_common_news(N, K, merged_result))

输出:

期望输出:  [3, 16, 17, 22, 31, 32, 34, 52]
输入:  [[3, 40, 34, 22, 52, 14, 35, 31, 27, 32, 16, 17], [32, 8, 9, 3, 52, 36, 33, 44, 60, 12, 19, 17, 34, 43, 2, 10, 50, 45, 14, 42, 22, 41, 51, 55, 27, 11, 16, 39, 35, 15, 59, 49, 47, 28, 1, 26, 4, 31], [17, 33, 12, 24, 52, 47, 32, 23, 58, 27, 1, 16, 31, 18, 42, 60, 28, 19, 15, 3, 20, 53, 49, 57, 25, 21, 26, 9, 56, 35, 14, 4, 22, 5, 10, 13, 34, 8, 41], [40, 51, 21, 36, 34, 10, 52, 31, 57, 26, 41, 3, 32, 12, 9, 56, 39, 7, 59, 13, 17, 53, 22, 4, 27, 42, 16, 25], [35, 31, 27, 22, 39, 40, 11, 58, 30, 16, 56, 47, 17, 26, 34, 12, 53, 5, 3, 45, 1, 8, 32, 18, 52, 6], [9, 40, 26, 36, 39, 35, 54, 34, 17, 46, 43, 13, 52, 56, 37, 14, 45, 22, 6, 41, 25, 49, 20, 5, 7, 3, 31, 44, 50, 4, 30, 32, 16, 1], [2, 33, 32, 3, 8, 43, 31, 58, 42, 17, 1, 16, 52, 30, 59, 6, 34, 13, 29, 46, 51, 12, 22], [57, 31, 16, 14, 32, 9, 20, 18, 24, 30, 4, 17, 22, 27, 43, 12, 37, 2, 13, 59, 34, 53, 3, 48, 21, 55, 52, 25], [24, 3, 34, 31, 56, 19, 12, 8, 16, 52, 51, 10, 22, 32, 49, 33, 17, 2, 48, 15, 45, 42, 25, 60, 30, 46, 47, 36, 39, 58, 6, 20, 5, 37, 14], [17, 22, 58, 32, 52, 13, 5, 26, 34, 48, 3, 31, 27, 24, 2, 16]]
实际输出:  [3, 16, 17, 22, 31, 32, 34, 52]

二、函数关键信息

函数名称:find_common_news
参数N: 整数,表示编辑的数量。
参数K: 整数,表示新闻的总数。
news_ids: 一个包含N个列表的列表,每个列表包含一个编辑编辑过的新闻编号。
返回值:一个升序排列的列表,包含所有编辑共同编辑过的新闻编号。

三、程序设计原理

1、初始化一个空集合common_news_set,用于存储所有编辑共同编辑过的新闻编号。
2、将第一个编辑编辑过的新闻编号集合作为初始集合,存储到common_news_set中。
3、遍历第2到第N个编辑的新闻编号集合:
3.1、使用集合的intersection_update方法,将当前编辑的新闻编号集合与common_news_set取交集,并更新common_news_set。
3.2、这样,common_news_set中将保留与当前编辑共同编辑过的新闻编号,即找到所有编辑共同编辑过的新闻编号的交集。
4、将common_news_set转换为列表,并使用Python的sorted函数对列表进行升序排序。
5、返回排序后的列表作为结果。

四、复杂度分析

1、时间复杂度分析
1.1、使用集合的交集操作找出被所有编辑共同编辑过的新闻:遍历每个新闻集合进行交集操作,时间复杂度为O(K),其中K为所有编辑操作的总数。
1.2、排序:对交集结果进行排序,时间复杂度为O(NlogN),其中N为符合条件的新闻数量。
1.3、综合来看,时间复杂度为O(K + NlogN)。
2、空间复杂度分析
common_news_set集合:存储被所有编辑共同编辑过的新闻,最坏情况下需要存储所有新闻,空间复杂度为O(N)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RunLoop小白入门

核心概念 什么是 RunLoop ? RunLoop 是 iOS 和 macOS 应用程序框架中的一个核心概念,用于管理线程的事件处理。它可以看作是一个循环,用于持续接收和处理各种事件,如用户输入、定时器、网络事件等。RunLoop 在保持应用程序响应用户交互和系…

系统与软件工程软件测试过程

系统与软件工程 软件测试 测试过程 ;对应的国标是GB/T 38634.4 2020 ,该标准的范围规定适应用于治理、管理和实施任何组织,项目或较小规模测试活动的软件测试的测试过程,定义了软件测试通用过程,给出了描述过程的支持信息图表。 一 术语和定义 1.1实测…

宏基础使用实践

文章目录 1.宏变量2.条件宏 1.宏变量 2.条件宏 #include <iostream> #define aa 30 #define version 2using namespace std;/** 1.宏变量* 2.条件宏* */int main() {cout << aa << endl;#if version > 1cout<< "升级版本"<<endl;…

力扣173题:二叉搜索树迭代器(含模拟面试)

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业…

Luminus推出新型高性能 UV-A LED

​Luminus Devices推出的SST-08H-UV&#xff0c;作为SST-08-UV的升级版&#xff0c;以其独特的高功率UV-A LED系列&#xff0c;犹如一道璀璨的光束&#xff0c;照亮了众多领域。这款LED的卓越之处在于&#xff0c;它巧妙地利用了365nm、385nm、395nm和405nm的峰值波长选项&…

TS中never类型的妙用

在 TypeScript&#xff08;TS&#xff09;中&#xff0c;never 类型是一个特殊的类型&#xff0c;它表示的是那些永不存在的值的类型。这听起来可能有点抽象&#xff0c;但实际上它在一些场景中非常有用。以下是 never 类型在 TypeScript 中的一些妙用&#xff1a; 表示函数永远…

使用System-Verilog实现FPGA基于DE2-115开发板驱动HC_SR04超声波测距模块|集成蜂鸣器,led和vga提示功能

文章目录 前言一、实验原理1.1 传感器概述&#xff1a;1.2 传感器引脚1.3 传感器工作原理1.4 整体测距原理及编写思路 二、System-Verilog文件2.1 时钟分频&#xff08;1&#xff09;clk_div.sv2.2 超声波测距&#xff08;1&#xff09;hc_sr_trig.sv&#xff08;2&#xff09;…

C# 语言类型(三)—数组/枚举类型/结构体

总目录 C# 语法总目录 参考链接&#xff1a; C#语法系列:C# 语言类型(一)—预定义类型值之数值类型 C#语法系列:C# 语言类型(二)—预定义类型之字符串及字符类型简述 C#语法系列:C# 语言类型(三)—数组/枚举类型/结构体 C#语法系列:C# 语言类型(四)—传递参数及其修饰符 C#语法…

比较两台计算机上的LabVIEW、工具包及驱动程序的一致性

比较两台计算机上的LabVIEW、工具包及驱动程序是否相同&#xff0c;可以通过以下步骤实现&#xff1a; 1. 检查LabVIEW版本 方法一&#xff1a;在LabVIEW中查看版本信息 步骤&#xff1a; 打开LabVIEW。点击菜单栏的 Help > About LabVIEW。记录显示的LabVIEW版本号和许可…

汽车数据应用构想(二)

一直说数据价值场景&#xff0c;啥叫有价值&#xff1f;啥样的场景有价值&#xff1f;按互联网的价值观来看&#xff0c;用户的高频需求就是价值。用户也许不会付费&#xff0c;但只要他天天用&#xff0c;那就是流量&#xff0c;就是用户黏性&#xff0c;就是价值&#xff01;…

力扣1 两数之和

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…

阿贝云:免费虚拟主机和免费云服务器评测

阿贝云是一家知名的云服务提供商&#xff0c;提供免费虚拟主机和免费云服务器等服务。在今天的评测中&#xff0c;我们将对阿贝云的免费虚拟主机和免费云服务器进行详细的试用和评测。 首先&#xff0c;让我们来看看阿贝云的免费虚拟主机服务。阿贝云的免费虚拟主机提供稳定可靠…

方法重写

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 基类的成员都会被派生类继承&#xff0c;当基类中的某个方法不完全适用于派生类时&#xff0c;就需要在派生类中重写父类的这个方法&#xff0c;这和…

HALCON飞拍贴片机框架程序——硬件介绍

本专栏主要讲解三头贴片机框架程序&#xff0c;包括硬件介绍和软件代码。硬件主要为视觉部分&#xff0c;软件为视觉检测代码部分。贴片机的机械硬件不做介绍。 具体设备运行视频可以搜索博主抖Y&#xff1a;“伶俐科技”观看。 贴片机硬件如下图分为三个部分&#xff0c;第一…

Go 语言中的日期与时间

在文章中&#xff0c;我们将深入探讨 Go 语言中日期和时间的处理。Go 提供了丰富的内置支持&#xff0c;通过 time 包&#xff0c;可以方便地进行时间的表示、格式化、计算以及比较。 文章目录 1、Go 语言中的日期时间介包介绍2、Go 语言中的日期时间介包的使用2.1、导入时间包…

网络安全等级保护,三级等保技术建议书(word原件获取)

1信息系统详细设计方案 1.1安全建设需求分析 1.1.1网络结构安全 1.1.2边界安全风险与需求分析 1.1.3运维风险需求分析 1.1.4关键服务器管理风险分析 1.1.5关键服务器用户操作管理风险分析 1.1.6数据库敏感数据运维风险分析 1.1.7“人机”运维操作行为风险综合分析 1.2…

Java数据结构与算法(有向图)

前言 有向图&#xff08;Directed Graph&#xff09;是一种由顶点和有方向的边组成的图数据结构。 实现原理 使用邻接表表示法实现有向图相对简单明了&#xff0c;步骤也相对简单。 1:首先创建有向图 2.创建顶点 3.顶点间创建边 具体代码实现 package test13;import ja…

Android bw_costly_<iface>链

测试时关注到bw_costly_链 因为和iface有关。猜测这个链是动态生成的。 开关数据业务测试&#xff0c;果然关闭数据业务后&#xff0c;bw_OUTPUT中不再会调用bw_costly_rmnet_data3&#xff0c;也没有bw_costly_rmnet_data3这个链了。 再次打开数据业务后出现了bw_costly_rmnet…

llvm 3.5 源码分析 clang for x86 002 之鸟瞰编译流程

0. 目标 debug的方式挖掘 clang 编译c文件的概述过程 1&#xff0c;示例源文件 summm.c int addd(int a, int b) {return ab; } 2&#xff0c;编译过程 $ clang -fPIE summm.c -c -o summm.o DEBUG: gdb clang set args -fPIE summm.c -c -o summm.…

【C语言】字符串逆序

(来源&#xff1a;牛客网) 题目&#xff1a; 将一个字符串str的内容颠倒过来&#xff0c;并输出。 数据范围&#xff1a;1≤len(str)≤10000 输入描述: 输入一个字符串&#xff0c;可以有空格 输出描述: 输出逆序的字符串 示例1 输入 I am a student 输出 tneduts…