自我介绍 瞎扯
项目经历 侃大山
三次握手 这个我会!
输入网址后使用了哪些协议 口胡TCP,DNS,IP
内核级线程和用户级线程的区别 不会
linux查看端口占用 netstat、lsof 不会
sql会不会 会个盲注
代码题:二叉树分行打印
傻逼,先用的优先队列,在小姐姐提示下发现错了
这不是直接一个队列能搞定?优先队列纯nt
struct node {
node* l,* r;
int val;
int t; //t表示层数
};
void print(node* root) {
if(root == null) return;
queue<node *> q;
cout << root->val;
int flag = root->t;
if(root->l) q.push(root->l);
if(root->r) q.push(root->r);
while(!q.empty()) {
node* temp = q.front();
q.pop();
if(temp->t > flag) {
cout << endl; //换行打印
flag = temp->t; //表示已换行
}
else cout << " "; //不换行则输出分割符
cout << temp->val;
if(temp->l) q.push(root->l);
if(temp->r) q.push(root->r);
}
}
C++中使用extern C调用指令
UDP和TCP是否能够同时监听一个端口
HTTP的返回值
ping使用了什么协议
ping的时候返回什么东西
set,map,list的实现原理
红黑树如何增加新键值对
按下ctrl+C为什么能中断程序
是否有方法避免这种中断
Linux查看进程占用
Vim全量替换文本
线程间通信的方式
给你0.3和0.7概率的事件,如何创造0.5概率
有一个函数 f() ,每次调用的时候,可以产生[0,N)的等概率的随机整数。现在需要你通过这个函数,产生一个新函数。这个新函数每次调用的时候,会产生[L,K)的等概率的随机整数。
[0,2) –>0,1
[0,3)–>0,1,2
[0,10000000000) –>
[0,3)
现在有一个整数数组:
8,10,4,9,15,13,11,5,6
求:第一个间断的数 7
要求:
时间复杂度O(N)
空间复杂度:尽可能小(O(1))
#include <bits/stdc++.h>
using namespace std;
#define N 9
void swap(int &a, int &b) {
a += b;
b = a - b;
a = a - b;
}
int main() {
int a[N], minn;
cin >> a[0];
minn = a[0];
for(int i = 1; i < N; ++i) {
cin >> a[i];
minn = min(minn, a[i]);
}
int maxn = minn + N;
for(int i = 0; i < N; ++i) {
if(a[i] < maxn && a[i] != i + minn) {
swap(a[i], a[a[i] - minn]);
}
}
int res = -1;
for(int i = 0; i < N; ++i) {
if(a[i] != i + minn) {
res = i + minn;
break;
}
}
//for(int i = 0; i < N; ++i) cout << a[i] << endl;
cout << res << endl;
}
GDB调试的原理
为什么C++的析构函数要是虚函数
写pass构造输出,请
void pass(){
}
int main( ) {
int x;
x = 123;
printf("%d \n",x);
pass();
printf("%d \n",x);
return 0;
}
123
456
topk,一个数组,有N个元素,找到其中第K大的元素,要求平均时间复杂度尽量低。
#include <iostream>
using namespace std;
const int N = 10005;
int h[N];
int n, k;
void swap(int a, int b) {
h[a] += h[b];
h[b] = h[a] - h[b];
h[a] = h[a] - h[b];
}
void heap_down(int t) {
int tmp = 0;
while(t * 2 <= k) {
if(h[t] > h[2 * t]) tmp = 2 * t;
else tmp = t;
if(t * 2 + 1 <= k) {
if(h[tmp] > h[t * 2 + 1]) tmp = t * 2 + 1;
}
if(tmp - t) {
swap(tmp, t);
t = tmp;
}
else break;
}
}
void heap_up(int t) {
int tmp = t;
while(tmp) {
if(h[tmp] < h[tmp / 2]) swap(tmp, tmp / 2);
tmp /= 2;
}
}
void heap_init(int t) {
for(int i = t; i >= t / 2; --i) heap_up(i);
}
int main() {
cin >> n >> k;
int temp;
for(int i = 0; i < n; ++i) {
cin >> h[i];
}
heap_init(k);
for(int i = k + 1; i <= n; ++i) {
if(h[i] > h[1]) {
h[1] = h[i];
heap_down(1);
}
}
for(int i = k; i >= 1; --i) cout << h[i] << endl;
}