牛客网刷题总结(一)

1.出栈顺序
已知某一个字母序列,把序列中的字母按出现顺序压入一个栈,在入栈的任意过程中,允许栈中的字母出栈,求所有可能的出栈顺序
算法:
1.首先我们对输入的字母序列进行字符的全排列(通过递归)
2.然后在得到每一种排列的时候对其进行检验,判断是否为输入字母序列的弹出序列。

2.字符串解析
以下函数解析字符串str是否合法的C语言字符串字面值定义(不考虑八进制和十六进制字符编码),如果是,则将解码后的内容保存到buf中,并返回0,否则返回-1。比如,"hello “sangfor”"解码后结果为hello “sangfor”。
算法:输入的字符串中,"占两个字符,不是代表转义字符,因此我们遍历输入字符串,将转义字符辨别出来,以一个字符的形式保存到输出字符串中即可。
注意:1.虽然在输入字符串中,,’,“都占一个字符的位置,要想判断该字符是否为这三种,必须用if(*str==’\’||*str==’’’||*str==’”’),即前面加斜杠
2.C语言中没有bool函数,用int的0,1来代替。

3.集合遍历
有K种颜色的小球(K<=10),每种小球有若干个,总数小于100个。

现在有一个小盒子,能放N个小球(N<=8),现在要从这些小球里挑出N个小球,放满盒子。
想知道有哪些挑选方式。注:每种颜色的小球之间没有差别。
请按数字递增顺序输出挑选小球的所有方式。
如有3种颜色,每种颜色小球的个数分别为a:1,b:2,c:3,挑出3个小球的挑法有:
003,012,021,102,111,120
算法:采用递归的方式即可。
注意:迭代层数过多时通常用递归来代替。

4.IP段合并
一个数字段由首尾两个数字标识,表示一个自然数集合,
比如数字段[beg, end)表示从beg到end之间的所有自然数,
包含beg,但不包含end。
有若干个数字段,这些数字段之间可能有重叠,
怎么把这些数字段合并去重,用最少个数的数字段来表示。
合并前后,整个集合包含的数字不发生变化。
算法:
1.先将各个IP段按beg从小到大排序,如果两个IPbeg一样,就按end从小到大排序
2.每个IP只需和其上一个进行比较即可, 如果可以合并就合并,不行就将此IP作为新的段推入结果中。
注意:自定义类型的排序需要自定义排序函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值