首页 > 其他分享 >最小表示法

最小表示法

时间:2024-12-02 20:32:37浏览次数:2  
标签:子串 int 最小 表示法 开头 指针

最小表示法

感觉这是一个很冷门的算法?

遇到的题不多,但是很有趣。

什么是最小表示法

用来求一个字符串或数列,循环得到的串或数列,字典序最小的是哪个。

如何求最小表示法

  • 定义两个指针 \(i\) 和 \(j\),初始时指向 \(0\) 和 \(1\)。
  • 维护一个 \(k\),表示 \(i\) 开头的子串和 \(j\) 开头的子串,现在的前 \(k-1\) 位是相同的。
  • 比较第 \(k\) 位,如果依然相等就 \(k++\)。
  • 否则假设更大的那个子串,从它的头指针位置到现在的第 \(k\) 位开头的子串,一定也大于更小的那个子串从它的头指针位置到现在的第 \(k\) 位开头的子串,所以大的那个跳到现在的第 \(k+1\) 位,并重新匹配。(有点像绕口令.....)
  • 如果指针跳的时候 \(i=j\) 了,那么令其中一个再向后跳。

Code

#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
int n,p,a[N];
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)scanf("%d",&a[i]);
    int i=0,j=1,k=0;
    while(i<n&&j<n&&k<n)
    {
        if(a[(i+k)%n]>a[(j+k)%n])i=i+k+1,k=0;
        else if(a[(i+k)%n]<a[(j+k)%n])j=j+k+1,k=0;
        else k++;
        if(i==j)i++;
    }
    p=min(i,j);
    for(int i=0;i<n;i++)printf("%d ",a[(p+i)%n]);
    return 0;
}

标签:子串,int,最小,表示法,开头,指针
From: https://www.cnblogs.com/DLYdly1105/p/18582648

相关文章

  • 最小生成树问题模板
    图有最小生成树的充要条件:图是可达的常见表述:从某节点出发可到达其余节点#include<bits/stdc++.h>usingnamespacestd;structedge{inta,b,w;booloperator<(edge&other){returnw<other.w;}}e[10001];intn,m;intp[10001];intfind(i......
  • LeetCode 2413[最小偶倍数]
    题目链接LeetCode2413[最小偶倍数]详情实例提示题解思路判断奇偶性奇数乘以2并返回偶数直接返回代码classSolution{public:intsmallestEvenMultiple(intn){if(0==(n%2))returnn;return2*n;}};......
  • 2024-12-02:划分数组得到最小的值之和。用go语言,你有两个数组,nums 和 andValues,它们的
    2024-12-02:划分数组得到最小的值之和。用go语言,你有两个数组,nums和andValues,它们的长度分别为n和m。定义数组的“值”为其最后一个元素。你的任务是将nums划分为m个不重叠的连续子数组。对于第i个子数组[li,ri],该子数组的所有元素通过按位与运算后,结果必须等......
  • 定时器实现之最小堆(一)
    1.概述        定时器是一种用于在指定时间后执行特定任务或操作的机制。在计算机科学和编程中,定时器通常用于实现延时操作、周期性任务调度等功能。         对于定时器的实现,核心分为两大块,分别是容器和触发方式,容器就是组织定时器中定时任务的数据结构,触......
  • 代码随想录算法训练营第十四天 | 226.翻转二叉树、 101. 对称二叉树、104.二叉树的最
    文档讲解:代码随想录视频讲解:代码随想录状态:完成4道题226.翻转二叉树整体思路:交换每一个节点的左右孩子思考:使用哪种遍历方式?建议使用前序或后序遍历(中序遍历比较绕)​前序遍历#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,va......
  • MATLAB实现基于PSO-LSSVM-Adaboost粒子群算法优化最小二乘支持向量机结合AdaBoost多输
    目录MATLAB实现基于PTO-LTTVM-Adaboott粒子群算法优化最小二乘支持向量机结合AdaBoott多输入单输出回归预测    2项目背景介绍...2背景...2项目目标与意义...2目标...2意义...2项目挑战...3项目特点与创新...3项目应用领域...3项目效果预测图程序设计........
  • 1201-用栈实现最小队列
    最小栈leetcode232.题目大意:仅使用两个栈实现一个队列,要求实现push、pop、peek、empty解题思路:栈和队列刚好想法,队列是先进先出,设定a队列正常存放,b队列存放倒序,push的操作正常存放进a队列,pop的操作需要倒序,peek也需要倒序,将判断方法放置于peek中,peek操作不会操作具体队列,需要......
  • 目前移动端的最小点击区域是多少呢?
    目前移动端最小点击区域的最佳实践是44x44像素。这并非一个强制标准,而是一个广为接受的经验法则,源于苹果的《HumanInterfaceGuidelines》。虽然没有强制规定,但遵循这个准则有几个重要原因:可用性:44x44像素的区域足够大,让用户用手指轻松点击,即使手指较粗或精度不高......
  • 【Leecode】Leecode刷题之路第64天之最小路径和
    题目出处64-最小路径和题目描述个人解法思路:todo代码示例:(Java)todo复杂度分析todo官方解法64-最小路径和-官方解法方法1:动态规划思路:代码示例:(Java)publicclassSolution1{publicintminPathSum(int[][]grid){if(grid==......
  • 代码随想录算法训练营第三十二天|leetcode509. 斐波那契数、leetcode70. 爬楼梯、leet
    1动态规划五部曲文章链接:代码随想录视频链接:从此再也不怕动态规划了,动态规划解题方法论大曝光!|理论基础|力扣刷题总结|动态规划入门_哔哩哔哩_bilibili确定dp数组(dptable)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组2leetcode509.斐......