前言
记2023年8月25日20点00分于溢信科技公司面试题
岗位:C/C++开发工程师
同款题连接
一、求给定数组中出现频率最高的前n个数
参考的链接
思路:利用两个数组,a[i] b[i],前者a[i]保存数据,后者b[i]保存每个数据出现的次数;
找到出现次数最多的b[i],且记录下其下标i,从而找到最大次数对应的数字。
#include<stdio.h>
#define N1 1000
int b[N1] = {0};
int max;
int index = 0;
int i, j, n;
void TopN(int a[],int size,int N)
{
//用双循环拿a[i]元素和a数组的每一个数比较(包括a[i]本身)
for (i = 0; i < size; i++) //记录每个数字出现的次数,每个数字至少出现一次,使用数组b[i]保存下来次数。
{
for (j = 0; j < size; j++)
{
if (a[i] == a[j])
{
b[i]++;//表示第i个元素出现的次数
}
}
}
for(int i=0;i<N;i++)//查找最大的次数,记住最大次数的下标,使用该下标找到出现次数最大的数字。
{
max = b[0];
for (j =1; j < size; j++)
{
if (max < b[j])
{
max = b[j];
index = j;
}
}
printf("%d,%d\n",a[index], max);//输出出现最多的数和次数
for(j=0;j<size;j++)
{
if(max==b[j])
{
b[j]=0;
}
}
}
}
int main()
{
// for (i = 0; i < n; i++)
// {
// scanf("%d", &a[i]);
// }
int a[N1]={10, 3, 2, -2, 5, 3, 4, 3, 0, 3, 2
};
top(a,10,2);
return 0;
}
二、字符串中获取最长无重复字符子串
参考:c语言 无重复字符的最长子串我只选了第一个解决方法:哈希和滑动数组
代码如下(示例):
int FindSub(char * s)
{
int count = 0;
int p = 0,q = 0;
int hash[256] = {0};
int len = strlen(s);
while(p<len)
{
if(hash[s[p]]!= 0 && hash[s[p]]>q)
{
q = hash[s[p]];
hash[s[p]] = p+1;
}
else
{
hash[s[p]] = p+1;
}
count = fmax(count,p-q+1);
p++;
}
return count;
}
三、100只骆驼,100筐土豆,大骆驼背3筐,中骆驼背2筐,2只小骆驼背一筐,问有多少种组合,写思路?
自己做了一半,卡在了公倍数上。参考了百度文库
总结
网上有很多对于试题的解决案例,关键是找到一个符合你思维方式的解决办法,思维可以一样,但答案可能会各有不同。
(声明以上试题均非源试题,仅供个人纪录和大家参考)