开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 14 天,点击查看活动详情
选择题
因为链表是不支持随机访问的,又是因为它是有序的双向链表,只需要变量一遍就可以定位删除。所以时间复杂度为
O(N)
就是b选项,没有什么疑问。
一定要最后处理p的前一个节点。首先要先处理q,把q的前后指针链接上、然后处理p前面的节点,最后处理p。
我们只需要两个栈相对增长就可以,所以栈底放在数组的头和尾即可。
当头尾相等的时候,元素为空或者是满(与具体的代码实现还是有差别的)
用一个队列进行辅助遍历,实现层序遍历。
插入完成之后二叉树的样子,所以深度为5。
topk问题还是要用堆排序还是不错的。
看下面的这个图,6个数字总共查找12次,所以平均查找长度为2.
希尔排序和直接插入排序都可以归为插入排序。对于插入排序,如果是按照从小到大的顺序进行排列的话,那么关键字的大小会影响他的比较次数。直接选择排序无论关键字是大还是小,都要遍历一遍。
编程题
本题很简单,题目说的非常清楚,可以说本题最大的难点就是求最大公约数吧,也是非常简单的。
#include <iostream>
using namespace std;
int GCD(int a,int b)
{
int t;
while(a%b)
{
t=a%b;
a=b;
b=t;
}
return b;
}
int main()
{
int n,a;
while(cin>>n>>a)
{
int t;
for(int i=0;i<n;i++)
{
cin>>t;
if(a>=t)
a+=t;
else
a+=GCD(a,t);
}
cout<<a<<endl;
}
return 0;
}
我们把所有的字符以及它们出现的次数存到哈希表中,然后再从第一个字符查找它出现几次,如果是一次直接输出,遍历完整个数组都没有出现只出现一次的字符,就输出-1.
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main()
{
string str;
cin>>str;
unordered_map<char,int> unmap;
for(auto x:str)
{
unmap[x]++;
}
for(auto x:str)
{
if(unmap[x]==1)
{
cout<<x<<endl;
return 0;
}
}
cout<<"-1"<<endl;
return 0;
}