【OJ】前K个高频单词和单词识别和两个数组的交集

个人主页 : zxctscl
如有转载请先通知

题目

  • 1. 692. 前K个高频单词
    • 1.1 分析
    • 1.2 代码
  • 2. KY264 单词识别
    • 2.1 分析
    • 2.2 代码
  • 3. 349. 两个数组的交集
    • 3.1 分析
    • 3.2 代码

1. 692. 前K个高频单词

在这里插入图片描述

1.1 分析

先试用map来统计每个单词出现的次数:

        map<string,int> dict;for(auto& e:words){dict[e]++;}

这时候单词是按照字典序排列的,但是频率是乱的。

可以直接用sort来排一下频率,在取出前k个就行。
但要用pair来排序,pair是支持比较大小的:
在这里插入图片描述

这里期望的是用second去比较,而不是用first,这时候,就得用一个仿函数:两个pair比较,按照scond去比较,排的是降序

struct kvCom
{bool operator()(const pair<string,int>&kv1,const pair<string,int>&kv2){return kv1.second > kv2.second;}
};

sort是一个函数模板,这里是类模板,传的是仿函数对象: sort(v.begin(),v.end(),kvCom());

排序完了,就得取出前k个的单词放在一个新vector里面:

vector<string> vRet;for(size_t i=0;i<k;++i){vRet.push_back(v[i].first);}return vRet;

此时的代码:

class Solution {
public:
struct kvCom
{bool operator()(const pair<string,int>&kv1,const pair<string,int>&kv2){return kv1.second > kv2.second;}
};vector<string> topKFrequent(vector<string>& words, int k) {map<string,int> dict;for(auto& e:words){dict[e]++;}vector<pair<string,int>> v(dict.begin(),dict.end());sort(v.begin(),v.end(),kvCom());vector<string> vRet;for(size_t i=0;i<k;++i){vRet.push_back(v[i].first);}return vRet;}
};

但是这里只过了部分的测试用例:

在这里插入图片描述

这里有一部分没有按照字典序排,这里是因为sort底层是快排排序不稳定,要修改可以把sort换成稳定的stable_sort: stable_sort(v.begin(),v.end(),kvCom());
这时候就可以了:
在这里插入图片描述

还可以修改仿函数:当second相同的时候,按照字典序从小到大排

struct kvCom
{bool operator()(const pair<string,int>&kv1,const pair<string,int>&kv2){return kv1.second > kv2.second||(kv1.second==kv2.second && kv1.first < kv2.first);}
};

1.2 代码

用稳定排序:

class Solution {
public:
struct kvCom
{bool operator()(const pair<string,int>&kv1,const pair<string,int>&kv2){return kv1.second > kv2.second;}
};vector<string> topKFrequent(vector<string>& words, int k) {map<string,int> dict;for(auto& e:words){dict[e]++;}vector<pair<string,int>> v(dict.begin(),dict.end());stable_sort(v.begin(),v.end(),kvCom());vector<string> vRet;for(size_t i=0;i<k;++i){vRet.push_back(v[i].first);}return vRet;}
};

修改仿函数:

class Solution {
public:
struct kvCom
{bool operator()(const pair<string,int>&kv1,const pair<string,int>&kv2){return kv1.second > kv2.second||(kv1.second==kv2.second && kv1.first < kv2.first);}
};vector<string> topKFrequent(vector<string>& words, int k) {map<string,int> dict;for(auto& e:words){dict[e]++;}vector<pair<string,int>> v(dict.begin(),dict.end());sort(v.begin(),v.end(),kvCom());vector<string> vRet;for(size_t i=0;i<k;++i){vRet.push_back(v[i].first);}return vRet;}
};

2. KY264 单词识别

在这里插入图片描述

2.1 分析

这道题和上面一样,就是多了单词的处理,把大写转换为小写,再放到map中。还要避免把空格和.给放入,就得在遍历英文句子的时候,遇到空格和符号就往后走。
在这里插入图片描述

2.2 代码

#include <algorithm>
#include <iostream>
#include<vector>
#include<string>
#include<map>
using namespace std;struct kvCom{bool operator()(const pair<string,int> kv1,const pair<string,int> kv2){return kv1.second>kv2.second||(kv1.second==kv2.second&&kv1.first<kv2.first);}
};int main() {string words;map<string,int> dict;while(getline(cin,words)){for(int i=0,j=0;i<words.size();i++){if(words[i]==' '||words[i]=='.'){string t=words.substr(j,i-j);if(isupper(t[0]))t[0]=tolower(t[0]);j=i+1;dict[t]++;}}vector<pair<string,int>> k(dict.begin(),dict.end());sort(k.begin(),k.end(),kvCom());for(int i=0;i<k.size();i++)cout<<k[i].first<<":"<<k[i].second<<endl;}  
}
// 64 位输出请用 printf("%lld")

3. 349. 两个数组的交集

在这里插入图片描述

3.1 分析

两个数组中都有重复的值,可以先用set去重,排序: set<int> s1(nums1.begin(),nums1.end()); set<int> s2(nums2.begin(),nums2.end());

两个数组都排好序了,比较两个数组,从小到大:
在这里插入图片描述
定义两个变量,遍历两个数组,如果两个变量对应值都相同,相同的值就是两个数组的交集,记录下之后,同时都往后走。如果两个值不相同,小的那个值对应的往后走,直到一个数组遍历完。
在这里插入图片描述
在这里插入图片描述

3.2 代码

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {set<int> s1(nums1.begin(),nums1.end());set<int> s2(nums2.begin(),nums2.end());vector<int> ret;auto it1=s1.begin();auto it2=s2.begin();while (it1 != s1.end() && it2 != s2.end()){if(*it1<*it2){it1++;}else if(*it1>*it2){it2++;}else{ret.push_back(*it1);it1++;it2++;    }     }return ret;}
};

在这里插入图片描述

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

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

相关文章

分布式协同 - 分布式锁一二事儿

文章目录 导图Pre概述概述1. 分布式互斥和临界资源的协调2. 分布式锁的基本原理3. 分布式锁的实现方式a. 基于数据库实现的分布式锁b. 基于Redis实现的分布式锁c. 基于Zookeeper实现的分布式锁 4. 高并发场景下的分布式锁优化a. 分段锁&#xff08;Sharded Locks&#xff09;b.…

Vue-01

Vue框架 Vue官网&#xff1a; Vue.js 框架 数据模型和view的通信就是依靠viewmodel的关键。 目前主流版本仍然是vue2版本。 Vue快速入门 1.新建一个HTML文件&#xff0c;引入Vue.js文件。Vue.js文件是官方引入的一个文件&#xff0c;我们如果要使用Vue就必须引入这个文件。…

【微服务】Nacos

一、安装 1、官网地址&#xff1a;https://nacos.io/download/nacos-server/ 2、启动&#xff1a;找到bin目录下的startup.cmd双击启动&#xff0c;或者打开一个命令窗口输入&#xff1a; startup.cmd -m standalone双击启动后如下&#xff1a;可以访问控制台地址 访问后的…

2025 - AIDD - python的autodock vina 批量分子对接改进版本2.0-全自动对接,完全全自动对接

2025 - AIDD - python的autodock vina 批量分子对接改进版本2.0-全自动对接&#xff0c;完全全自动对接 import warnings from pathlib import Path import subprocess from itertools import product import numpy as np import pandas as pd from MDAnalysis import Univers…

【uniapp】轮播图

前言 Uniapp的swiper组件是一个滑块视图容器组件&#xff0c;可以在其中放置多个轮播图或滑动卡片。它是基于微信小程序的swiper组件进行封装&#xff0c;可以在不同的平台上使用&#xff0c;如微信小程序、H5、App等。 效果图 前端代码 swiper组件 <template><vi…

由于导包而引发的错误

今天在调试时发现删除功能无论如何都无法实现&#xff0c;于是调试找到了mapper层的错误但不知道为什么报错。以下是报错信息。 Caused by: org.apache.ibatis.binding.BindingException: Parameter userIds not found. Available parameters are [arg0, collection, list]at o…

STM32 ADC --- 知识点总结

STM32 ADC — 知识点总结 文章目录 STM32 ADC --- 知识点总结cubeMX中配置注解单次转换模式、连续转换模式、扫描模式单通道采样的情况单次转换模式&#xff1a;连续转换模式&#xff1a; 多通道采样的情况禁止扫描模式&#xff08;单次转换模式或连续转换模式&#xff09;单次…

Web day02 Js Vue Ajax

目录 1.javascript: 1.js的引入方式&#xff1a; 2.js变量 & 数据类型 & 输出语句&#xff1a; 模板字符串&#xff1a; 3.函数 & 自定义对象&#xff1a; 4. json 字符串 & DOM操作&#xff1a; 5. js事件监听&#xff1a; 6.js的模块化导入或者导出&a…

Kylin Server V10 下 RocketMQ 主备自动切换模式部署

一、NameServer简介 NameServer 是一个注册中心,提供服务注册和服务发现的功能。NameServer 可以集群部署,集群中每个节点都是对等的关系,节点之间互不通信。 服务注册 Broker 启动的时候会向所有的 NameServer 节点进行注册,注意这里是向集群中所有的 NameServer 节点注册…

芯片测试-RF中的S参数,return loss, VSWR,反射系数,插入损耗,隔离度等

RF中的S参数&#xff0c;return loss, VSWR&#xff0c;反射系数&#xff0c;插入损耗&#xff0c;隔离度 &#x1f4a2;S参数&#x1f4a2;&#x1f4a2;S11与return loss&#xff0c;VSWR&#xff0c;反射系数&#x1f4a2;&#x1f4a2;S21&#xff0c;插入损耗和增益&#…

一个开源轻量级的服务器资源监控平台,支持告警推送

大家好&#xff0c;今天给大家分享一款开源的轻量级服务器资源监控工具Beszel&#xff0c;提供历史数据记录、Docker容器统计信息监控以及多种警报功能&#xff0c;用于监控服务器资源。 项目介绍 Beszel由hub&#xff08;中心服务器端应用&#xff0c;基于PocketBase构建&…

linux centos nginx编译安装

编译安装nginx&#xff08;Centos&#xff09; 编译需要的基础环境yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c1.下载nginx源码包 Nginx源码包下载地址&#xff1a;nginx源码包下载 2. 上传nginx源码包到服务器 我上传的地址是/home/chenhao/nginx…

【面试重难点问题】c++中为什么可以函数重载,但是c语言中不可以

本文章是对于“c中为什么可以函数重载&#xff0c;但是c语言中不可以”这个问题的探究&#xff1a; 当然这是一个值得深入探讨的问题。在面对难题时&#xff0c;我们常常会竭尽全力寻找答案&#xff0c;不惜挖掘三尺以探究竟。面对上面这个问题时&#xff0c;理解计算机系统的…

AI实践项目——图片视频自动上色系统,让旧照片焕然一新

1.主要内容 &#xff08;1&#xff09;项目概述 在图片处理的世界中&#xff0c;AI不仅用于识别和分析&#xff0c;还可以赋予灰度照片色彩&#xff0c;为其注入新的生命。今天&#xff0c;我们将探讨一种通过深度学习模型为灰度图片上色的技术。 ①参考文献 Colorful Image…

评分规则的建模,用户全选就是满分10分(分数可自定义), 选2个5分, 选2个以下0分

子夜(603***854) 15:11:40 和各位讨论一下设计问题: 有个有业务场景: 有一组产品共4个产品(数目用户可自定义), 需要一套规则,比如如果用户全选就是满分10分(分数可自定义), 选2个5分, 选2个以下0分 又比如另一组产品 产品有个必选属性,如果选了其中所有的必选则5分, 其他项每1…

计算机网络:数据链路层(二)

网课资源&#xff1a; 湖科大教书匠 1、网络适配器和MAC地址 习题1 1 以下哪个地址是广播MAC地址 A. 00-00-00-00-00-00 B. AB-CD-EF-11-22-33 C. FF-FF-FF-FF-FF-FF D. 29-29-29-29-29-29 2 以下哪个地址是多播MAC地址 A. 00-00-00-00-00-00 B. A9-8B-7C-6D-5E-4F C. FF-FF-…

# issue 6 网络编程基础

一、网络的物理结构和光纤千兆网络 首先&#xff0c;我们需要知道网络的物理结构——数据是如何从一台机器传输到另外一台机器的 这个过程是非常重要的。现在很多人做软件开发&#xff0c;只会软件角度&#xff0c;这导致讲软件原理头头是道&#xff0c;但是连数据线都不会接&a…

彻底理解quadtree四叉树、Octree八叉树 —— 点云的空间划分的标准做法

1.参考文章&#xff1a; &#xff08;1&#xff09;https://www.zhihu.com/question/25111128 这里面的第一个回答&#xff0c;有一幅图&#xff1a; 只要理解的四叉树的构建&#xff0c;对于八叉树的构建原理类比方法完全一样&#xff1a;对于二维平面内的随机分布的这些点&…

飞塔防火墙只允许国内IP访问

飞塔防火墙只允许国内IP访问 方法1 新增地址对象&#xff0c;注意里面已经细分为中国内地、中国香港、中国澳门和中国台湾 方法2 手动新增国内IP的对象组&#xff0c;目前好像一共有8632个&#xff0c;每个对象最多支持600个IP段

超详细ensp配置VRRP和MSTP协议

一、简介 1、什么是VRRP&#xff1a; &#xff08;1&#xff09;VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;的概念&#xff1a; VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;指的是一种实现路由器冗余备份的协议&#xff0c;常用于…