首页 > 其他分享 >计数的思想

计数的思想

时间:2023-11-21 18:55:17浏览次数:29  
标签:cnt idx 思想 int ++ 计数 buf mx

计数的思想,源自于计数排序。

计数就是把出现过的元素个数进行记录。在集合相关操作中,计数+1表示加入元素,计数-1表示删除元素。

我们在操作过程中,有时要对某些变量进行记录,记录出现的位置,记录上一次的值都是计数的思想。

 

 

 本题我们采用计数的思想,记录每个字母出现的次数。s的长度为n。出现最多次字母的次数为x。若x > n + 1 >> 1则一定无解。

class Solution {
public:
    string reorganizeString(string s) {
        vector<int> cnt(26);
        int n = s.size();
        for(int i = 0; i < n; i ++ ) {
            cnt[s[i] - 'a'] ++ ;
        }

        int mx = -1, pos = -1, lim = n + 1 >> 1;
        for(int i = 0; i < cnt.size(); i ++ ) {
            if(cnt[i] > mx) {
                mx = cnt[i];
                pos = i;
            }
        }
        if(mx > lim) return "";
        //初始化桶,将最多的元素放进去
        vector<string> buf(mx);
        for(int i = 0; i < cnt[pos]; i ++ ) {
            buf[i] += 'a' + pos;
        }
        cnt[pos] = 0;

        int idx = 0;
        for(int i = 0; i < 26; i ++ ) {
            for(int j = 0; j < cnt[i]; j ++ ) {
                buf[idx] += 'a' + i;
                idx = (idx + 1) % mx;
            }
        }

        string res;
        for(int i = 0; i < mx; i ++ ) {
            res += buf[i];
        }

        return res;
    }
};

 

 

 

class Solution {
public:
    vector<int> rearrangeBarcodes(vector<int>& barcodes) {
        unordered_map<int, int> cnt;
        for(auto it: barcodes) {
            cnt[it] ++ ;
        }

        int mx = 0, mxk = -1;
        for(auto &[k, v]: cnt) {
            if(v > mx) {
                mx = v;
                mxk = k;
            }
        }

        vector<vector<int>> buf(mx, vector<int>());
        for(int i = 0; i < mx; i ++ ) buf[i].push_back(mxk);

        int idx = 0;
        for(auto &[k, v]: cnt) {
            if(k == mxk) continue;
            for(int i = 0; i < v; i ++ ) {
                buf[idx].push_back(k);
                idx = (idx + 1) % mx;
            }
        }

        vector<int> res;

        for(auto &it: buf) {
            for(auto num: it) {
                res.push_back(num);
            }
        }

        return res;
    }
};

 

标签:cnt,idx,思想,int,++,计数,buf,mx
From: https://www.cnblogs.com/zk6696/p/17847303.html

相关文章

  • FPGA入门笔记004——BCD计数器设计与使用
    1、设置一个最大值为10的四位计数器,Verilog代码如下:moduleBCD_Counter( Clk, Cin, Rst_n, Cout, q); inputClk; //计数器基准时钟 inputCin; //计数器进位输入 inputRst_n; //系统复位 // outputRegCout; //计数器进位输出 outputCout; //计数器进位输出 out......
  • LY1464 [ 20231112 NOIP 模拟赛 T4 ] 序列计数
    题意给定\(n,m\)。求:\(a_1+a_2+...+a_m=n\)\(1^{a_1}\times2^{a_2}\times...\timesm^{a_m}\equivx(\bmodm)\)对于\(x\in[1,m)\)满足上述条件的方案数。Sol注意到下面的式子等价于:\(1\times1\times1...\times2\times2...\time......
  • FPGA入门笔记003——计数器IP核调用与验证
    FPGA设计方式主要有三种:1、原理图(不推荐);2、VerilogHDL设计方式;3、IP核输入方式计数器IP核调用与验证步骤如下:1、添加IP核文件打开QuartusII,新建一个项目,名称为counter_ip。选择Tools->MegaWizardPlug-InManager。选择第一个选项。在搜索栏中输入COUNTER,单击LPM_COU......
  • Java学习—计数排序
    计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。1.计数排序的特征当输入的元素是n个0到k之间的整数时,它的运行时间是Θ(n+k)。计数排序不是比较排序,排序的速度快于任......
  • T399753 counting problem(计数问题)题解
    LinkT399753countingproblem(计数问题)Question给出一个正整数\(n\),求\(AB+CD=n\)的方案数,\(A,B,C,D\)都是要求是正整数Solution考虑直接枚举\(ABCD\)显然是不切实际的那么就折半枚举设\(F_i\)表示两个数的乘积为\(i\)的方案数答案就是\(\sum\limits_{i=1......
  • 《Java编程思想第四版》学习笔记37--关于 TextField的ActionListener接收器
    //:TextNew.java//TextfieldswithJava1.1eventsimportjava.awt.*;importjava.awt.event.*;importjava.applet.*;publicclassTextNewextendsApplet{Buttonb1=newButton("GetText"),b2=newButton("SetText");TextFie......
  • 51定时计数器
        ......
  • 在思想方面讨论堆排序(考研自用,按非递减方式排序)
     目录1.什么是排序2.关于堆排序的几个问题3.问题求解首先:排序的定义  拿冒泡排序(递增)来讲,在一个给定的数组序列中,若A[i+1]<A[i],则将其两个的数值进行交换,排好序的序列应该是递增的,类似于[1,2,3,4,5...];所以排序是在数组中进行的,物理......
  • 计数问题专题
    鉴于我之前每次考试计数问题都会错一大堆,所以我滚过来写总结了先膜拜贡献了这个题单的@feecle6418以下题目笔者没有事先做过,和大家一起做,所以会有一些不成熟的思路,但是同时也会更好的展示思维路径.我们先来看几道题来醒醒脑子洛谷P6146HelpYourselfG题意简述:现......
  • js是一门基于对象的语言,js不是面向对象的语言,但是可以模拟面向对象的思想,具体说面向
    下列关于JavaScript的说法中正确的是()A所有变量在使用之前必须做声明BJavaScript是面向对象的程序设计语言CJavaScript是解释性语言DJavaScript前身是Oak语言正确答案:C选C。解释性语言是相对于编译型语言存在的,源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由......