首页 > 其他分享 >后缀数组学习笔记

后缀数组学习笔记

时间:2024-06-08 17:44:55浏览次数:21  
标签:cnt 个位 后缀 笔记 int 基数排序 数组 序列 include

1. 前置知识:基数排序

1.1. 思想

现有如下序列:3,44,38,5,47,15,36,32,50,现在要用基数排序算法排序,要怎么做?

基数排序的初始状态如下:

  1. 按照个位将原序列中的数分组,放入对应的集合

  1. 将分好的数按照个位的顺序取出,得到:

  1. 将序列中的数重新按照十位分组,放入对应集合:

  1. 将每一位上的数按从下到上的顺序依次取出,就是答案

在数更多或位数更多的情况下,重复此过程即可

1.2. 代码:

#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[105],cnt[15],b[105];
int main()
{
	scanf("%d",&n);
	int mx=0;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		mx=max(mx,a[i]);
	}
	int d=0;
	while(mx>0)
	{
		mx/=10;
		d++;
	}
	int tmp=1;
	for(int i=1;i<=d;i++)
	{
		for(int j=0;j<10;j++) cnt[j]=0;
		for(int j=1;j<=n;j++)
		{
			int k=(a[j]/tmp)%10;
			cnt[k]++;
		}
		for(int j=1;j<10;j++)
		{
			cnt[j]+=cnt[j-1];
		}
		for(int j=n;j>0;j--)
		{
			int k=(a[j]/tmp)%10;
			b[cnt[k]]=a[j];
			cnt[k]--;
		}
		for(int j=1;j<=n;j++)
		{
			a[j]=b[j];
		}
		tmp*=10;
	}
	for(int i=1;i<=n;i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}

标签:cnt,个位,后缀,笔记,int,基数排序,数组,序列,include
From: https://www.cnblogs.com/wangsiqi2010916/p/18238799

相关文章

  • 常用字符串与数组方法学习
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title><......
  • C++ 6.8笔记:①判断质数②二分基础算法
    质数试除法判定质数boolprimes(intx){  if(x<2)returnfalse;  for(inti=2;i<=x/i;i++){    if(x%i==0)returnfalse;  }  returntrue;}埃筛1intp[N],k,n;boolf[N];voidprimes(intn){//埃筛,思想:质数的倍数是合数for(inti......
  • FFMpeg笔记(十四)继续说说FFmpeg 升级6.1 遇到的那些坑
    一、mp4秒播率下降  灰度阶段发现秒播率略低0.x%,以为是灰度的数据抖动。上线后短视频业务方找过来,说秒播率明显下降。一起分析,发现业务方不止关心1秒秒播率,也关心首次播放vv的200ms秒播率,筛选出来发现数据大降。。然后我就开始分析。思路是将起播分为多个阶段,查数据看哪个......
  • Net AI学习笔记系列第五章 OpenCVSharp实操——图片中物体轮廓查找描绘
    .NetAI学习笔记系列第五章OpenCVSharp实操——图片中物体轮廓查找描绘文章目录.NetAI学习笔记系列前言一、OpenCVSharp实操——图片中物体轮廓查找描绘二、步骤1.开发工具2.引入库3.示例代码4.运行效果总结前言本文主要介绍使用OpenCVSharp中的FindContours......
  • Java——数组排序
     一、排序介绍1、排序的概念排序是将多个数据按照指定的顺序进行排列的过程。2、排序的种类排序可以分为两大类:内部排序和外部排序。3、内部排序和外部排序1)内部排序内部排序是指数据在内存中进行排序,适用于数据量较小的情况。数据可以完全装入内存。常见的内部排序算......
  • Java——数组
    一、数组介绍数组是Java中的一种数据结构,用于存储一组相同类型的元素。它们在内存中是连续存储的,并且通过索引来访问元素。以下是关于Java数组的详细介绍:1、数组的创建和初始化在Java中,数组是一种对象,它可以存储固定大小的同类型元素。数组的大小在创建时确定,并且一旦创建就......
  • UES-10-增强数组
    创建数组Array.of()方法将接收的每个参数作为数组元素创建并返回数组。和Array构造器相比,用于函数参数更可靠。functioncreate(fun,value){returnfun(value);}letitems=create(Array.of,value);Array.of创建数组使用的是当前of()方法中的this,而不是Symb......
  • digit 手写数据库笔记 (机械学习)
    参考书籍第三章内容digit手写数据库#最初的分类器#digits手写数字库importnumpyasnpimportmatplotlib.pyplotaspltfromsklearnimportdatasetsfromsklearnimporttree#性能评价相关的库fromsklearnimportmetrics#digits数据加载digits=......
  • 华为OD刷题C卷 - 每日刷题 8(整形数组按个位值排序,停车场车辆统计)
    两段代码分别解决了两个不同的算法问题,下面是对它们的概述:1、(整形数组按个位值排序):这段代码是解决“整形数组按个位值排序”的问题。它提供了一个Java类Main,其中包含main方法,用于读取输入、执行排序并打印结果。代码首先使用Scanner从标准输入读取一行文本,该文本包含一个......
  • Java那些事儿 —— 写一篇妈妈也能看懂的Java学习笔记
    Java那些事儿——写一篇妈妈也能看懂的Java学习笔记小白也能看懂的Java学习笔记(因为我也是小白,所以写一点小白自己能看懂的东西)这本笔记包括但是不限于Java知识,(做开发没多久感觉自己忘记的差不多了,最近又看了几本书,心血来潮写一个笔记)写这个的目的意在自我复习,尽量让自......