我正在研究C中的一个问题,我对它有一个快速的问题。问题如下:我给出了一些排序的整数数组,比如a[i] = { 1, 2, 3, 3, 3 }
。现在,我应该运行一个搜索给定整数的程序,返回第一次出现的位置以及该数组中该整数的出现次数。
所以,如果我正在搜索3
,那么我会在a[2]
处首次出现,并且有三次出现3
。对于第一个发现第一次出现的部分,我可以简单地使用字符串头文件中的strcspn
。但是,对于第二部分,是否有一个内置函数可以计算特定整数的实例数?
我可以通过简单地增加一个计数器变量来实现我的“赤手空拳”。但是,我的教授给了我一个提示,返回类型应该是size_t,这表明可以使用一些内置函数。任何帮助,将不胜感激。
谢谢, 亚历山大
答案 0 :(得分:5)
不,这样做没有标准功能。你的教授说返回类型应该是size_t,因为这是在计算内存中对象的大小或数量时使用的标准类型。在某些系统上,“unsigned int”类型可能不够大。
答案 1 :(得分:2)
搜索x,您可以使用二分搜索来找到x的第一个出现,并通过使用不同的条件来设置左侧和右侧,找到大于x(或数组末尾)的任何整数的第一次出现你的搜索窗口。
伪代码中的简单二进制搜索:
left,right = 0, n
while right - left > 1
mid = left + right / 2
if array[mid] < x
left = mid
else
right = mid
这里需要更改的是if是否决定是否将搜索窗口的左侧或右侧移入。如果您有两次搜索,一次查找x-es序列的左侧一个找到正确的一面,那么这两者之间的区别就是参赛人数。
答案 2 :(得分:1)
提示:由于给定数组已经排序,您可以使用二进制搜索来查找给定整数的实例,向后走直到找到第一个出现,然后递增位置直到不再匹配。
答案 3 :(得分:0)
我不认为strcspn会有所帮助 - 它适用于字符串(字符数组),但是你说你有一个整数数组。其他人已经说了我要说的其他内容。
答案 4 :(得分:0)
使用size_t变量作为计数器将起作用。但更好的方法是使用二进制搜索找到一个实例(有一个库函数)并从那里向前和向后搜索。