首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏C++信息学奥赛

    杨校老师课堂之字符排序算法——排序结合字符标记专项题单

    一、知识重点(一)字符的本质:数组映射字符核心逻辑:用数组下标映射字符的 ASCII 值,数组元素存储字符出现的次数(或是否出现)。 (二)字符的 3 大典型应用场景1. 统计每个字符的出现次数(字符的统计)2. 找出现次数最多的字符字符的计数)3. 找未出现的字符字符的存在)(三)字符的关键知识点知识点说明数组与 ASCII 的映射利用字符的 ASCII 码作为数组下标,实现 “字符→次数” 的直接映射数组的初始化需覆盖目标字符的 ASCII 范围(如小写字母 97-122,大写字母 65-90)遍历与筛选逻辑通过循环遍历数组,结合条件判断(>0/==0/>maxx)筛选结果字符与整数的转换输出时用 (char)i 将 ASCII 值转回字符 ;输入时 char c 直接存 ASCII 值(四)字符的扩展与进阶支持更多字符:若涉及中文或特殊字符,需用 ** Unicode 编码 **(如 wchar_t 或字符串统计),但基础思想一致(用下标映射编码值

    20700编辑于 2025-07-03
  • 来自专栏用户2442861的专栏

    排序

    每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用排序进行排序)。排序是鸽巢排序的一种归纳结果。当要被排序的阵列内的数值是均匀分配的时候,排序使用线性时间(Θ(n))。 总共有100个。然后对A[1..n]从头到尾扫描一遍,把每个A[i]放入对应的B[j]中。 然后再对这100个中每个里的数字排序,这时可用冒泡,选择,乃至快排,一般来说任何排序法都可以。 最后依次输出每个里面的数字,且每个中的数字从小到大输出,这样就得到所有数字排好序的一个序列了。          假设有n个数字,有m个,如果数字是平均分布的,则每个里面平均有n/m个数字。 因为输入数均匀分布在[0,1)上,所以一般不会有很多数落在一个中的情况。为得到结果,先对各个中的数进行排序,然后按次序把各中的元素列出来即可。 当然排序的空间复杂度为O(N+M),如果输入数据非常庞大,而的数量也非常多,则空间代价无疑是昂贵的。此外,排序是稳定的。

    76240发布于 2018-09-14
  • 来自专栏我的博客

    排序

    排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。 每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用排序进行排序) 思想: 设待排序序列的元素取值范围为0到m,则我们新建一个大小为m+1的临时数组并把初始值都设为0,遍历待排序序列

    72660发布于 2018-04-28
  • 来自专栏用户1175783的专栏

    # 排序

    # 排序 # 原理 求出无序集合的最大值与最小值(这里的最小值指存在负数的情况),创建对应的数组长度 length=max+1 这里要处理一下负数 if min<0: length+=abs(min) 该length就是数组的长度,并创建这个数组将所有值初始化为0 然后遍历无须数组,修改中元素的个数(数组所以对应的值就是无需数组中相同值的个数) 最后只需要将数组中值大于 # 实现 inputArr = [ 11,10,199383, 34, -1,-32,-29, 4, 0, 34, 5, 4, 36, 1, 8, 123, 453, 1008] print("未排序集合 minItem>item): minItem=item # 最小值,最大值 print("min:{0}\tmax:{1}".format(minItem,maxItem)) # 创建数组 minItem<0): length+=abs(minItem) bigArr=[0]*length for item in inputArr: bigArr[item]+=1 # 将中的数据放到对应的有序数组上

    44820发布于 2019-09-10
  • 来自专栏数据结构与算法

    排序

    排序        排序的思想是若待排序的记录的关键字在一个明显有限范围内(整型)时,可设计有限个有序,每个桶装入一个值(当然也可以装入若干个值),顺序输出各的值,将得到有序的序列。 iostream> 2 using namespace std; 3 int a[100001]; 4 int b[100001]; 5 int maxn=-1; 6 int main() 7 { 8

    61190发布于 2018-04-12
  • 来自专栏Jed的技术阶梯

    排序

    排序是一种排序的思想,其实现包括计数排序和基数排序两种,冒泡排序、选择排序、插入排序、归并排序、快速排序和堆排序都是基于比较的排序,而排序提出了一种新的思路,即基于数据状态的排序。 1. 排序的思想 (1) 得到无序数组的取值范围 ? (2) 根据取值范围"创建"对应数量的"" ? (3) 遍历数组,把每个元素放到对应的""中 ? (4) 按照顺序遍历中的每个元素,依次放到数组中,即可完成数组的排序。 ""是一种容器,这个容器可以用多种数据结构实现,包括数组、队列或者栈。 2. ,总的来说为O(n) 稳定性:排序是否稳定取决于""用什么数据结构实现,如果是队列,那么可以保证相同的元素"取出去"后的相对位置与"放进来"之前是相同的,即排序是稳定的,而如果用栈来实现"",则排序一定是不稳定的 ,因为排序可以做到稳定,所以排序是稳定的排序算法 3.

    1.2K60发布于 2019-05-09
  • 来自专栏后端知识体系

    排序

    # LeetCode-排序 排序算法回顾 示例1 输入: nums = [4,0,1,2,0,5] 输出: [0,0,1,2,4,5] # 解题思路 排序(Bucket Sort)的原理很简单 在排序时,创建容量为MAX的数组r,并将数组元素都初始化为0;将容量为MAX的数组中的每一个单元都看作一个""。 在排序时,逐个遍历数组a,将数组a的值,作为"数组r"的下标。 ,在计数排序中,每个只存储相同的元素 而排序中每个存储一定范围的元素,通过映射函数,将待排序数组中的元素存储到各个对应的中 之后对每个中的元素进行排序 最后将非空桶中的元素逐个放入原序列中 排序需要尽量保证元素分散均匀 ,否则当所有数据集中在同一个中时,排序就会失效 排序的稳定性取决于内部使用的排序算法 # Java代码2 import java.util.ArrayList; import java.util.Collections 主要步骤有: N次循环,将每个元素装入对应的中 M次循环,对每个中的数据进行排序(平均每个有N/M个元素) 一般使用较为快速的排序算法,时间复杂度为O(nlogn),实际的排序过程是以链表形式插入的

    40930编辑于 2022-07-14
  • 来自专栏hotarugaliの技术分享

    排序

    简介   排序是将待排序序列分到有限数量的中,然后对每一个分别进行排序。 排序的前提假设为被排序序列的关键字数值符合均匀分布,此时排序的平均时间复杂度为 ,最坏时间复杂度为 其中 为的数量。当数量 时,此时排序的复杂度为线性复杂度 。   排序是非原址的,其稳定性取决于内层排序的稳定性。一般采用稳定的插入排序作为内层排序算法,此时排序是稳定的。 2. 思想 排序的主要思想是对待排序序列的关键字数值进行分块,每一块对应一个,然后对每个使用插入排序(或其他排序算法)进行排序,最后将所有中的元素串联起来即得到有序序列。 3. 实现 3.1 伪代码 BucketSort(A, mx, n) { // mx 为最大数值,n 为数量 // 定义 n 个 define bucket[n] // 计算分块的块大小

    41130编辑于 2022-03-01
  • 来自专栏灰子学技术

    限速之令牌和漏算法

    对于限速来说,最常用的两个算法是:令牌算法和漏算法,下面我们便来看下它们是怎么回事。 一、令牌: 令牌这种控制机制基于令牌中是否存在令牌来指示什么时候可以发送流量。 如果令牌中存在令牌,则允许发送流量;而如果令牌中不存在令牌,则不允许发送流量。因此,如果突发门限被合理地配置并且令牌中有足够的令牌,那么流量就可以以峰值速率发送。 令牌的工作过程: 1.令牌根据时间匀速的产生令牌数量,这里假设是r,存入到令牌中. 2.令牌在初始化的时候,会分配一定数量的令牌数capicity。 当前时间t内可以消费的令牌数量为: 当前令牌剩余的令牌数(这里最大是capicity) + r*t 二、漏可以看作是一个带有常量服务时间的单服务器队列,如果漏(包缓存)溢出,那么数据包会被丢弃 https://baike.baidu.com/item/%E6%BC%8F%E6%A1%B6%E7%AE%97%E6%B3%95 ?

    9.7K32发布于 2020-10-10
  • 来自专栏Jasper小笔记

    8 字符串转换整数 (atoi)

    首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 接下来的转化规则如下: 如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。 该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。 注意:假如该字符串中的第一个非空格字符不是一个有效整数字符字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。 首先字符是进入状态0(start)如果字符是空格那么下个仍然进入状态0.如果是其他则进入状态3(end)结束处理。

    90420发布于 2021-01-18
  • 来自专栏编程语言

    iOS:URL 特殊字符 # UTF-8

    .URL 加载过程中,出现汉字乱码 ---- NSString* urlstr = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding ]; 2.链接中包含特殊字符,1方法,会导致特殊字符也进行转码,所以用以下方法 ---- self.url = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes @_~%#[]", NULL, kCFStringEncodingUTF8)); OK,中文问题解决完毕

    1.4K10发布于 2019-03-06
  • 来自专栏悠扬前奏的博客

    LintCode-8.旋转字符

    题目 描述 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 样例 对于字符串 "abcdefg". offset=0 => "abcdefg" offset=1 => "gabcdef

    55220发布于 2019-05-28
  • 来自专栏技术杂货店

    LeetCode【8】-- 字符串转换整数

    注意: 本题中的空白字符只包括空格字符 ' ' 。 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。 '0') > 7)) return 0; 对于小于0的情况,假设最小值是-128,那么sum是数字部分 128, 如果当前sum大于 12,那么就一定超出,或者sum == 12,但是个位数大于8, if (sum < Integer.MIN_VALUE/10 || (sum == Integer.MIN_VALUE / 10 && x (str.charAt(i) - '0') > 8)) return if (sum > (Integer.MAX_VALUE) / 10 || sum == (Integer.MAX_VALUE) / 10 && (str.charAt(i) - '0') > 8) } else { if (sum > (INT_MAX) / 10 || sum == (INT_MAX) / 10 && (str[i] - '0') > 8)

    98610编辑于 2022-02-15
  • 来自专栏搜云库技术团队

    接口限流算法:漏算法&令牌算法

    这时候漏算法可能就不合适了,令牌算法更为适合。 令牌算法的原理是系统以恒定的速率产生令牌,然后把令牌放到令牌中,令牌有一个容量,当令牌满了的时候,再向其中放令牌,那么多余的令牌会被丢弃;当想要处理一个请求的时候,需要从令牌中取出一个令牌,如果此时令牌中没有令牌 00:26:59.920 | pool-1-thread-7获取令牌成功,获取耗:1.999806 第 7 个任务执行 2018-08-11 00:27:01.919 | pool-1-thread-8获取令牌成功 ,获取耗:1.999433 第 8 个任务执行 acquire函数主要用于获取permits个令牌,并计算需要等待多长时间,进而挂起等待,并将该值返回 一个RateLimiter主要定义了发放permits 令牌算法VS漏算法 漏的出水速度是恒定的,那么意味着如果瞬时大流量的话,将有大部分请求被丢弃掉(也就是所谓的溢出)。 令牌 生成令牌的速度是恒定的,而请求去拿令牌是没有速度限制的。

    1.6K30发布于 2019-10-18
  • 来自专栏Java技术栈

    接口限流算法:漏算法&令牌算法。

    限流算法 既然要限流,就得提到限流算法了,一般有漏算法和令牌算法两种限流算法。 令牌算法的原理是系统会以一个恒定的速度往里放入令牌,而如果请求需要被处理,则需要先从里获取一个令牌,当里没有令牌可取时,则拒绝服务。 漏算法和令牌算法的选择 漏算法与令牌算法在表面看起来类似,很容易将两者混淆。但事实上,这两者具有截然不同的特性,且为不同的目的而使用。 漏算法与令牌算法的区别在于,漏算法能够强行限制数据的传输速率,令牌算法能够在限制数据的平均传输速率的同时还允许某种程度的突发传输。 因此,漏算法对于存在突发特性的流量来说缺乏效率。而令牌算法则能够满足这些具有突发特性的流量。通常,漏算法与令牌算法结合起来为网络流量提供更高效的控制。

    4.5K90发布于 2018-03-30
  • 来自专栏C++信息学奥赛

    杨校老师课堂之排序——计数

    【输入样例】7 2 5 6 1 2 8 9 2 8 3 3 9 9 4 3 1 9 4 5 3 9 1 6 4 8 3 9 1 7 1 7 1 2 3 2 5 4 1 2 6 4 7 9 4 6 10 【输入样例】7 2 5 6 1 2 8 9 2 8 3 3 9 9 4 3 1 9 4 5 3 9 1 6 4 8 3 9 1 7 1 7 1 2 3 2 5 4 1 2 6 4 7 9 4 6 10

    26400编辑于 2025-07-03
  • 来自专栏CSDNToQQCode

    java字符串练习题8、同构字符

    java字符串练习题8、同构字符串 题目:  给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。 题解: 同构字符串也就是相同的结构呗,那么咱们在理解的过程中就例如【abbc】对照【deef】 我用数组解的,相对相率应该是高于链表的,很多题目都是这样,用数组有的时候更合适。 这里要两个变量,题目中也说了【s 和 t 由任意有效的 ASCII 字符组成】,那么我们创造数组的时候长度给127就行,大了没用。 这个题目就是纯数组的理论,还有字符串以及字符的处理,当我们基础知识很夯实的时候就会很容易想出来各种各样的解决方法,所以刷题很重要。

    27420编辑于 2023-01-13
  • 来自专栏C++信息学奥赛

    杨校老师课堂之排序——标记

    通过签到确定已经有8位同学到达,请输出未到达同学的编号。【输入格式】输入一行,8个数字,表示已经签到同学的编号【输出格式】输出一行,2个整数,表示未签到同学的编号,按照从小到大的顺序输出。 【输入样例】3 2 9 10 6 4 5 7【输出样例】1 8#include <iostream>using namespace std;int main() { int a[15] = {0}

    18800编辑于 2025-07-03
  • 来自专栏人人都是架构师

    常用限流策略——漏与令牌介绍

    我们生活中也会经常遇到限流的场景,比如:某景区限制每日进入景区的游客数量为8万人;沙河地铁站早高峰通过站外排队逐一放行的方式限制同一时间进入车站的旅客数量等。 漏法的关键点在于漏始终按照固定的速率运行,但是它并不能很好的处理有大量突发请求的场景,毕竟在某些场景下我们可能需要提高系统的处理效率,而不是一味的按照固定速率处理请求。 / 1 10ms // 2 10ms // 3 10ms // 4 10ms // 5 10ms // 6 10ms // 7 10ms // 8 令牌其实和漏的原理类似,令牌按固定的速率往里放入令牌,并且只要能从里取出令牌就能通过,令牌支持突发流量的快速处理。 对于从里取不到令牌的场景,我们可以选择等待也可以直接拒绝并返回。 对于令牌的Go语言实现,大家可以参照github.com/juju/ratelimit库。

    1.1K30编辑于 2023-09-10
  • 来自专栏码农沉思录

    如何实现漏算法与令牌算法

    目前常见的算法是漏算法和令牌算法。 令牌算法。相比漏算法而言区别在于,令牌是会去匀速的生成令牌,拿到令牌才能够进行处理,类似于匀速往里放令牌。 漏算法是:生产者消费者模型,生产者往木桶里生产数据,消费者按照预先定义的速度去消费数据。 应用场景: 漏算法:必须读写分离的情况下,限制读取的速度。 ,确认没有超过的最大的容量 private Monitor offerMonitor=new Monitor(); //从里消费数据时,里必须存在数据 private Monitor 相比漏算法而言区别在于,令牌是会去匀速的生成令牌,拿到令牌才能够进行处理,类似于匀速往里放令牌 * 漏算法是:生产者消费者模型,生产者往木桶里生产数据,消费者按照定义的速度去消费数据 * * 应用场景 : * 漏算法:必须读写分流的情况下,限制读取的速度 * 令牌算法:必须读写分离的情况下,限制写的速率或者小米手机饥饿营销的场景 只卖1分种抢购1000 * * 实现的方法都是一样。

    1.9K20发布于 2019-07-13
领券