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

刷题日记day14-字符串-数组去重和排序


文章目录

  • 前言
  • 一、问题复述
  • 二、解法及其思想
  • 三、代码实现及细节(仅算法相关部分)


前言

简单写个日记记录我刷了什么题以及心得总结。


一、问题复述

  • 给定一个有重复元素的乱序数组,要求按照元素出现次数从高到底排序,并且相同出现次数间按照元素的第一次出现顺序进行排序。
  • 输入:一行元素组成的数组
  • 输出:去重排序后数组

例:

输入
1,3,3,3,2,4,4,4,5
输出
3,4,1,2,5

二、解法及其思想

  • 分别用unordered_map<int,int>记录元素初次出现位置occur和出现频率fre,再记录非重复元素序列unique,最后按照出现频率和出现位置对unique进行自定义排序即可。

三、代码实现及细节(仅算法相关部分)

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

void replace(string& s) {
	for (auto& e : s) {
		if (e == ',')e = ' ';
	}
}
vector<int> ans(vector<int> a) {
	unordered_map<int, int> fre;//元素出现频率
	unordered_map<int, int> occur;//元素第一次出现位置
	vector<int> unique;//目标唯一元素序列
	for (int i = 0; i < a.size(); i++) {
		if (fre.find(a[i]) == fre.end()) {
			occur[a[i]] = i;
			unique.push_back(a[i]);
		}
		fre[a[i]]++;
	}
	//自定义排序规则:先排出现频率,再排出现位置
	auto cmp = [&](int a, int b) {
		if (fre[a] != fre[b])return fre[a] > fre[b];
		else return occur[a] < occur[b];
	};
	sort(unique.begin(), unique.end(),cmp);

	for (int i = 0; i < unique.size() - 1;i++) {
		cout << unique[i] << ",";
	}
	cout << unique[unique.size() - 1];
	return unique;
}
int main() {
	string s;
	getline(cin, s);
	replace(s);
	istringstream iss(s);
	int n;
	vector<int> a;
	int i = 0;
	while (iss >> n) {
		a.push_back(n);
	}
	ans(a);
	return 0;
}

相关文章:

  • flutter 专题 七十四 Flutter开发之动画
  • 【Docker镜像】Python项目之使用Dockerfile构建镜像(二)
  • 在Trae中设置Python解释器版本
  • 从零实现3D自动标注:MS3D、MS3D++
  • Android 项目问题:The specified Android SDK Build Tools version (28.0.3) is ignored
  • 【SMBIOS数据块类型列表】
  • 精心整理-2024最新网络安全-信息安全全套资料(学习路线、教程笔记、工具软件、面试文档).zip
  • SQL Server:当在删除数据库时因为存在触发器而无法删除
  • 中小型企业网络的搭建
  • c++学习系列----006. c++模板(函数模板)
  • 静态网页应用开发环境搭建实战教程
  • Manim 输出视频尺寸设置
  • CD20.【C++ Dev】类和对象(11) 日期类对象的成员函数(++、--、日期-日期)
  • C++:allocator类(动态数组续)
  • Playwright设置base_url的三种方式
  • BUUCTF-web刷题篇(3)
  • PHP如何搭建设置代理http并加密使用?
  • PPT——组合SCI论文图片
  • 深入解析:MySQL 中 NULL 值是否占用 1 bit 存储空间?
  • “三小时搞定AI工具开发“:基于MCP的Node.js极简实践
  • 阿斯利康中国区一季度收入增5%,或面临最高800万美元新罚单
  • 中青旅:第一季度营业收入约20.54亿元,乌镇景区接待游客数量同比减少6.7%
  • 海量数据处于“原矿”状态,数据价值释放如何破局?
  • 美国参议院投票通过戴维·珀杜出任美国驻华大使
  • 五大国有银行明确将撤销监事会
  • 央行召开落实金融“五篇大文章”总体统计制度动员部署会议