谈谈你对查找算法学习体会。也可以谈谈STL容器中查找如何用的。
查找在方法上可分为一下几种类型
1. 顺序查找
2. 二分查找
3. 插值查找
4. 斐波那契查找
5. 树表查找
6. 分块查找
7. 哈希查找
针对不同的类型,并没有好与不好之分,有些方法只适用于特定环境,有些方法比较简单,但浪费时间,有些方法思路十分复杂,但节约时间,但是还是得用空间去抵,所以学会查找不仅仅是要去学各种查找方法的原理以及代码实现,更重要的是能够针对不同的环境和情形下选择正确的查找方式,同时C++的库函数里面也有许多自带函数,熟练运用可以事半功倍。
map工作原理:映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了, 底层采用的是树型结构,多数使用平衡二叉树实现,查找某一值是常数时间,遍历起来效果也不错, 只是每次插入值的时候,会重新构成底层的平衡二叉树,效率有一定影响.
设计思路:利用中序遍历,如果是递增则成功,否则失败
bool IsBST(BinTree T) {
int num[999],t=1;
利用非递归方法进行中序遍历{
将中序遍历得到的结果储存在数组num中;
}
for (int i = 1; num[i] != 0; i++)
{
如果发现后面数比前面小,即不是递增数列,t = 0;
}
return t;
}
设计思路:如果QQ号申请正确就插入,失败则提示,登陆时存在此QQ则成功,否则失败,也可用红黑树做
BinTree BST = NULL;int n, i = 0;char K[100001];User QQ[100001];
输入 n;
for (i = 0; i < n; i++) {
输入QQ账号,密码;
}
int t = 0;
for (i = 0; i < n; i++) {
if (K[i] != ‘N‘) t += 1;
}
if (t == 0) {
for (i = 0; i < n; i++) {
if((QQ号符合规定)
cout << "New: OK" << endl;
else cout << "ERROR: Exist"<<endl;
}
return 0;
}
for (i = 0; i < n; i++) {
if (K[i] == ‘N‘) {
if (QQ号或者密码不符合要求) {
cout << "ERROR: Exist" << endl;
continue;
}
else {
插入QQ[i]
cout << "New: OK" << endl;
continue;
}
}
else if (K[i] == ‘L‘) {
if (找不到QQ[i]) {
cout << "ERROR: Not Exist" << endl;
continue;
}
else
{
if (找到) {
cout << "Login: OK" << endl;
continue;
}
else {
cout << "ERROR: Wrong PW" << endl;
continue;
}}}}
部分正确:这道题由于时间复杂度比较紧张,所有全删除,且最大值这个点一直过不了,于是多加了一个if让他顺利通过
设计思路:利用红黑树,如果飞行距离不足500则补到500,然后插入,然后在里面找,如果找到输出飞行距离,找不到就NO info吧
int N, K, i;char idcard[19];long long flyway;
scanf("%d %d",&N,&K);
map<string, long long>Map;
for (i = 0; i < N; i++)
{
输入ID和飞行距离;
飞行距离不足500则自动增加到500;
if (找不到Map[idcard])) {
初始化Map[idcard] = 0;
}
Map[idcard] += flyway;
}
scanf("%d",&N);
for (i = 0; i < N; i++) {
scanf("%s",idcard);
if (找不到)
{
printf("No Info\n");
}
else
输出飞行总和距离;
}
部分正确:利用C++的语法会导致时间不足支撑,讲C++的cin和cout全部改成scanf和printf就成功通过了
本次题目集总分:175分
必做题共:145分
本题评分规则:
(1)2个题目集PTA总分145--175分:3分(全部题目都做)
(2)PTA总分在120分--145分:2.5分(必做题全部做完,选做题做部分)
(3)PTA总分在105--120分:2分(必做题大部分做完)
(4)PTA总分在80--105分:1.5分
(5)PTA总分在45分-80分:1分
(6)PTA总分在45分以下:0分
```
代码点评:
在码云的项目中,依次选择统计-Commits历史-设置时间段,进行搜索并截图,如下图所示,需要出现学号、项目提交说明。请在码云中将你的昵称改为“学号-姓名”。
原文:https://www.cnblogs.com/linyipeng/p/9078997.html