当前位置: 首页 > news >正文

LeetCode 349. 两个数组的交集和 692. 前K个高频单词

在这里插入图片描述

两个数组的交集

在这里插入图片描述
难度 简单 题目链接

这道题的难度不大,我们可以把数组里的数据存到set里面。这样就完成了排序和去重,然后我们再把一个set里面的数据和另外一个set数据进行比较。如果相同就插入到数组里。

代码如下:
在这里插入图片描述
但是这个算法的时间复杂度为O(N*logN),我们有什么办法改进一下呢?
两个数组里面的元素相比较,小的++,相等就是交集,然后同时++

大致思路:
在这里插入图片描述
根据上面的思路,1<2那么it2++。
在这里插入图片描述
2<3it1++。
在这里插入图片描述
此时it1和it2相等,那么就同时++,当某一个数组结束,交集就找完了。

代码如下:
在这里插入图片描述
这个时间复杂度是O(N)。如果我们想求差集,方法是:相比较,小的就是差集,然后小的++。如果相等了,就同时++

前K个高频单词

在这里插入图片描述
难度 中等 题目链接

方法一

首先,我们把words里面的单词个数统计一下:
在这里插入图片描述
因为map里面是按照key(string)排序,但我们需要按照次数排序。
但在标准库里面sort:
在这里插入图片描述
要传随机迭代器,map是双向迭代器,所以不能直接传。
在这里插入图片描述
这里数组迭代器解引用后是map迭代器,迭代器不支持排序。所以我们需要写仿函数来让里面的迭代器按照次数来排序:
在这里插入图片描述
但是还是存在一些问题:因为题目上还要求了,如果不同的单词有相同出现频率, 按字典顺序排序。但是标准库里面sort是不稳定的:
在这里插入图片描述
可能让某些小的单词放在前面。所以标准库里面还提供了稳定的排序:stable_sort。最后,我们再把前k个单词找出来就行了:
在这里插入图片描述
其实如果我们不使用stable_sort,我们可以在仿函数比较的时候加上一些条件:
在这里插入图片描述
意思就是如果次数相同,就比较它们的ASCII码。

方法二

在这里插入图片描述
方法二并不采用sort来排序,而是采用multimap来排序。但是这里还不行,因为multimap默认是升序,而我们要降序的方式。

在这里插入图片描述

http://www.lryc.cn/news/29070.html

相关文章:

  • SpringCloud的五大组件功能
  • 剑指 Offer II 016. 不含重复字符的最长子字符串
  • HBase读取流程详解
  • Redis学习(一):NoSQL概述
  • ESP32设备驱动-MCP23017并行IO扩展驱动
  • RabbitMQ简介
  • 【项目设计】高并发内存池(五)[释放内存流程及调通]
  • Git标签与版本发布
  • Python面向对象编程
  • 【什么情况会导致 MySQL 索引失效?】
  • Java核心知识点整理之小碎片--每天一点点(坚持呀)--自问自答系列版本
  • js中new Map()的使用方法
  • synchronized从入门到踹门
  • ubuntu-8-安装nfs服务共享目录
  • 算法练习(特辑)设计算法的常用思想
  • 哈希->模拟实现+位图应用
  • 苹果手机想要传输数据到电脑怎么传输呢?
  • Linux 练习四 (目录操作 + 文件操作)
  • 自学大数据第四天~hadoop集群的搭建
  • ULID和UUID
  • java基础面试10题
  • Golang闭包问题及并发闭包问题
  • 基频的后处理
  • vue3 toRefs详解
  • Spring——AOP是什么?如何使用?
  • 【微服务】认识微服务
  • 【独家】华为OD机试 C 语言解题 - 最长连续子串
  • 【Linux】CentOS7操作系统安装nginx实战(多种方法,超详细)
  • 【FMCW 01】中频IF信号
  • 【蓝桥杯试题】暴力枚举题型