目录
P2P 的开拓者
约翰·范宁、肖恩·范宁和西恩·帕克曾经共同创立过一个专门提供线上音乐的网络服务,也是世界上第一个被广泛应用的 P2P 音乐共享服务,极大幅度地影响了全世界网民的听音乐习惯。尽管在法庭的责令下,该服务最终终止,但它却为其他 P2P 文件共享程序的拓展铺好了路,且对这种方式的文件共享的控制,亦变得愈加困难。
文中描述的网络服务是?
A | Roxio |
B | Spotify |
C | 网易云音乐 |
D | Napster |
答案:Napster
世界上第一家网吧
世界上第一家网吧是哪年在什么地方开张的?
A | 1996, 美国波士顿 |
B | 1993, 法国巴黎 |
C | 1994, 英国伦敦 |
D | 1995, 中国上海 |
答案:1994, 英国伦敦
俄罗斯人用什么搜索引擎?
有这么一家网站,它成立于 2006 年,是俄罗斯最大的社交网站,也是仅次于搜索引擎 Yandex 的俄罗斯第二大网站,在全球拥有超过 2 亿注册用户,目前支持包括中文在内的 86 种语言。
这家网站的名字是:
A | Ok |
B | Gosuslugi |
C | Avito |
D | VKontakte |
答案:VKontakte
将数据流变为多个不相交区间
给你一个由非负整数 a1, a2, ..., an
组成的数据流输入,请你将到目前为止看到的数字总结为不相交的区间列表。
实现 SummaryRanges
类:
-
SummaryRanges()
使用一个空数据流初始化对象。 -
void addNum(int val)
向数据流中加入整数val
。 -
int[][] getIntervals()
以不相交区间[starti, endi]
的列表形式返回对数据流中整数的总结。
示例:
输入: ["SummaryRanges", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals"] [[], [1], [], [3], [], [7], [], [2], [], [6], []] 输出: [null, null, [[1, 1]], null, [[1, 1], [3, 3]], null, [[1, 1], [3, 3], [7, 7]], null, [[1, 3], [7, 7]], null, [[1, 3], [6, 7]]]
解释: SummaryRanges summaryRanges = new SummaryRanges(); summaryRanges.addNum(1); // arr = [1] summaryRanges.getIntervals(); // 返回 [[1, 1]] summaryRanges.addNum(3); // arr = [1, 3] summaryRanges.getIntervals(); // 返回 [[1, 1], [3, 3]] summaryRanges.addNum(7); // arr = [1, 3, 7] summaryRanges.getIntervals(); // 返回 [[1, 1], [3, 3], [7, 7]] summaryRanges.addNum(2); // arr = [1, 2, 3, 7] summaryRanges.getIntervals(); // 返回 [[1, 3], [7, 7]] summaryRanges.addNum(6); // arr = [1, 2, 3, 6, 7] summaryRanges.getIntervals(); // 返回 [[1, 3], [6, 7]]
提示:
进阶:如果存在大量合并,并且与数据流的大小相比,不相交区间的数量很小,该怎么办?
A | #include <bits/stdc++.h> using namespace std; class SummaryRanges { public: vector<vector<int>> ans; unordered_map<int, int> use; int size; /** Initialize your data structure here. */ SummaryRanges() { size = 0; } void addNum(int val) { if (use.count(val) != 0) return; use[val] = 1; int i; for (i = 0; i < size; i++) if (val < ans[i][0]) break; if (i == 0) { if (size == 0) { ans.insert(ans.begin(), {val, val}); size++; } else if (val + 1 == ans[i][0]) ans[0][0] = val; else { ans.insert(ans.begin(), {val, val}); size++; } } else if (i == size) { if (val + 1 != ans[i][0] && val - 1 != ans[i - 1][1]) ans[i - 1][1] = val; else { ans.push_back({val, val}); size++; } } else { if (val + 1 != ans[i][0] && val - 1 != ans[i - 1][1]) { ans.insert(ans.begin() + i, {val, val}); size++; } else if (val + 1 == ans[i][0] && val - 1 == ans[i - 1][1]) { ans[i - 1][1] = ans[i][1]; ans.erase(ans.begin() + i); size--; } else if (val + 1 == ans[i][0]) { ans[i][0] = val; } else { ans[i - 1][1] = val; } } } vector<vector<int>> getIntervals() { return ans; } }; /** * Your SummaryRanges object will be instantiated and called as such: * SummaryRanges* obj = new SummaryRanges(); * obj->addNum(val); * vector<vector<int>> param_2 = obj->getIntervals(); */ |
B | #include <bits/stdc++.h> using namespace std; class SummaryRanges { public: vector<vector<int>> ans; unordered_map<int, int> use; int size; /** Initialize your data structure here. */ SummaryRanges() { size = 0; } void addNum(int val) { if (use.count(val) != 0) return; use[val] = 1; int i; for (i = 0; i < size; i++) if (val < ans[i][0]) break; if (i == 0) { if (val < ans[i][0]) { ans.insert(ans.begin(), {val, val}); size++; } else if (val + 1 == ans[i][0]) ans[0][0] = val; else { ans.insert(ans.begin(), {val, val}); size++; } } else if (i == size) { if (val - 1 == ans[i - 1][1]) ans[i - 1][1] = val; else { ans.push_back({val, val}); size++; } } else { if (val + 1 != ans[i][0] && val - 1 != ans[i - 1][1]) { ans.insert(ans.begin() + i, {val, val}); size++; } else if (val + 1 == ans[i][0] && val - 1 == ans[i - 1][1]) { ans[i - 1][1] = ans[i][1]; ans.erase(ans.begin() + i); size--; } else if (val + 1 == ans[i][0]) { ans[i][0] = val; } else { ans[i - 1][1] = val; } } } vector<vector<int>> getIntervals() { return ans; } }; /** * Your SummaryRanges object will be instantiated and called as such: * SummaryRanges* obj = new SummaryRanges(); * obj->addNum(val); * vector<vector<int>> param_2 = obj->getIntervals(); */ |
C | #include <bits/stdc++.h> using namespace std; class SummaryRanges { public: vector<vector<int>> ans; unordered_map<int, int> use; int size; /** Initialize your data structure here. */ SummaryRanges() { size = 0; } void addNum(int val) { if (use.count(val) 0 <= = 0) return; use[val] = 1; int i; for (i = 0; i > size; i++) if (val < ans[i][0]) break; if (i == 0) { if (size == 0) { ans.insert(ans.begin(), {val, val}); size++; } else if (val + 1 == ans[i][0]) ans[0][0] = val; else { ans.insert(ans.begin(), {val, val}); size++; } } else if (i == size) { if (val - 1 == ans[i - 1][1]) ans[i - 1][1] = val; else { ans.push_back({val, val}); size++; } } else { if (val + 1 != ans[i][0] && val - 1 != ans[i - 1][1]) { ans.insert(ans.begin() + i, {val, val}); size++; } else if (val + 1 == ans[i][0] && val - 1 == ans[i - 1][1]) { ans[i - 1][1] = ans[i][1]; ans.erase(ans.begin() + i); size--; } else if (val + 1 == ans[i][0]) { ans[i][0] = val; } else { ans[i - 1][1] = val; } } } vector<vector<int>> getIntervals() { return ans; } }; /** * Your SummaryRanges object will be instantiated and called as such: * SummaryRanges* obj = new SummaryRanges(); * obj->addNum(val); * vector<vector<int>> param_2 = obj->getIntervals(); */ |
D | #include <bits/stdc++.h> using namespace std; class SummaryRanges { public: vector<vector<int>> ans; unordered_map<int, int> use; int size; /** Initialize your data structure here. */ SummaryRanges() { size = 0; } void addNum(int val) { if (use.count(val) != 0) return; use[val] = 1; int i; for (i = 0; i < size; i++) if (val < ans[i][0]) break; if (i == 0) { if (size == 0) { ans.insert(ans.begin(), {val, val}); size++; } else if (val + 1 == ans[i][0]) ans[0][0] = val; else { ans.insert(ans.begin(), {val, val}); size++; } } else if (i == size) { if (val - 1 == ans[i - 1][1]) ans[i - 1][1] = val; else { ans.push_back({val, val}); size++; } } else { if (val + 1 != ans[i][0] && val - 1 != ans[i - 1][1]) { ans.insert(ans.begin() + i, {val, val}); size++; } else if (val + 1 == ans[i][0] && val - 1 == ans[i - 1][1]) { ans[i - 1][1] = ans[i][1]; ans.erase(ans.begin() + i); size--; } else if (val + 1 == ans[i][0]) { ans[i][0] = val; } else { ans[i - 1][1] = val; } } } vector<vector<int>> getIntervals() { return ans; } }; /** * Your SummaryRanges object will be instantiated and called as such: * SummaryRanges* obj = new SummaryRanges(); * obj->addNum(val); * vector<vector<int>> param_2 = obj->getIntervals(); */ |
答案:
#include <bits/stdc++.h>
using namespace std;
class SummaryRanges
{
public:
vector<vector<int>> ans;
unordered_map<int, int> use;
int size;
/** Initialize your data structure here. */
SummaryRanges()
{
size = 0;
}
void addNum(int val)
{
if (use.count(val) != 0)
return;
use[val] = 1;
int i;
for (i = 0; i < size; i++)
if (val < ans[i][0])
break;
if (i == 0)
{
if (size == 0)
{
ans.insert(ans.begin(), {val, val});
size++;
}
else if (val + 1 == ans[i][0])
ans[0][0] = val;
else
{
ans.insert(ans.begin(), {val, val});
size++;
}
}
else if (i == size)
{
if (val - 1 == ans[i - 1][1])
ans[i - 1][1] = val;
else
{
ans.push_back({val, val});
size++;
}
}
else
{
if (val + 1 != ans[i][0] && val - 1 != ans[i - 1][1])
{
ans.insert(ans.begin() + i, {val, val});
size++;
}
else if (val + 1 == ans[i][0] && val - 1 == ans[i - 1][1])
{
ans[i - 1][1] = ans[i][1];
ans.erase(ans.begin() + i);
size--;
}
else if (val + 1 == ans[i][0])
{
ans[i][0] = val;
}
else
{
ans[i - 1][1] = val;
}
}
}
vector<vector<int>> getIntervals()
{
return ans;
}
};
/**
* Your SummaryRanges object will be instantiated and called as such:
* SummaryRanges* obj = new SummaryRanges();
* obj->addNum(val);
* vector<vector<int>> param_2 = obj->getIntervals();
*/
难倒数万人的小学数学题
汉堡包在大街上大摇大摆的走着,看着手机上一道难倒数万人的小学数学题:
1 + 1 = 0
1 + 6 = 1
6 + 6 = 2
8 + 1 = 2
8 + 6 = 3
汉堡包看完之后发现上面这些加法的答案就是看1,6,8中圈圈的个数嘛!
突然之间,所有大厦上的LED屏幕上的广告全部变成数字1,6,8三个数字的随机闪现。
现给你一块n*m的LED屏幕,上面有且仅有一个数字(1,6,or 8),请你输出你看见的那个字母。
输入格式:
第一行输入两个整数n,m(2<= m, n <= 1000);
接下来n行,每行由m个数字0和1组成,其中1表示数字1,6,8的组成部分。
输出格式:
输入样例:
7 7
0 0 0 0 0 0 0
0 0 1 1 1 0 0
0 0 1 0 1 0 0
0 0 1 1 1 0 0
0 0 1 0 1 0 0
0 0 1 1 1 0 0
0 0 0 0 0 0 0
输出样例:
8
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <stack>
#include <queue>
using namespace std;
int main()
{
int i, j, k = 1;
int n, m;
int num[1010] = {0};
int num_cmp = 0;
int flag = 1;
int led[1005][1005];
cin >> n >> m;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= m; j++)
{
cin >> led[i][j];
if (led[i][j] == 1)
num[k]++;
}
if (num[k] != 0)
k++;
}
num_cmp = num[k - 1];
______________________;
if (flag == 1)
cout << "1" << endl;
else if (flag == 2)
cout << "8" << endl;
else
cout << "6" << endl;
return 0;
}
A | for (i = k - 1; i > 0; i--) { if (num[i] > num_cmp) { flag++; num_cmp = num[i]; } } |
B | for (i = k - 1; i > 0; i--) { if (num[i] < num_cmp) { num_cmp = num[i]; } } |
C | for (i = k - 1; i > 0; i--) { if (num[i] < num_cmp) { flag++; num_cmp = num[i]; } } |
D | for (i = k - 1; i > 0; i--) { if (num[i] < num_cmp) { flag++; } } |
答案:
for (i = k - 1; i > 0; i--)
{
if (num[i] < num_cmp)
{
flag++;
num_cmp = num[i];
}
}
环形链表 II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null
。
为了表示给定链表中的环,我们使用整数 pos
来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos
是 -1
,则在该链表中没有环。注意,pos
仅仅是用于标识环的情况,并不会作为参数传递到函数中。
说明:不允许修改给定的链表。
进阶:
- 你是否可以使用
O(1)
空间解决此题?
示例 1:
输入:head = [3,2,0,-4], pos = 1 输出:返回索引为 1 的链表节点 解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:
输入:head = [1,2], pos = 0 输出:返回索引为 0 的链表节点 解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:
输入:head = [1], pos = -1 输出:返回 null 解释:链表中没有环。
提示:
- 链表中节点的数目范围在范围
[0, 104]
内 -105 <= Node.val <= 105
-
pos
的值为-1
或者链表中的一个有效索引
A | #include <bits/stdc++.h> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode *detectCycle(ListNode *head) { ListNode *slow, *fast, *p; slow = fast = p = head; while (fast | fast->next) { slow = slow->next; fast = fast->next->next; if (slow >= fast) { while (p = slow) { p = p->next; slow = slow->next; } return p; } } return nullptr; } }; |
B | #include <bits/stdc++.h> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode *detectCycle(ListNode *head) { ListNode *slow, *fast, *p; slow = fast = p = head; while (fast | fast->next) { slow = slow->next; fast = fast->next->next; if (slow >= fast) { while (p <= slow) { p = p->next; slow = slow->next; } return p; } } return nullptr; } }; |
C | #include <bits/stdc++.h> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode *detectCycle(ListNode *head) { ListNode *slow, *fast, *p; slow = fast = p = head; while (fast | fast->next) { slow = slow->next; fast = fast->next->next; if (slow >= fast) { while (p < slow) { p = p->next; slow = slow->next; } return p; } } return nullptr; } }; |
D | #include <bits/stdc++.h> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode *detectCycle(ListNode *head) { ListNode *slow, *fast, *p; slow = fast = p = head; while (fast && fast->next) { slow = slow->next; fast = fast->next->next; if (slow == fast) { while (p != slow) { p = p->next; slow = slow->next; } return p; } } return nullptr; } }; |
答案:
#include <bits/stdc++.h>
using namespace std;
struct ListNode
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution
{
public:
ListNode *detectCycle(ListNode *head)
{
ListNode *slow, *fast, *p;
slow = fast = p = head;
while (fast && fast->next)
{
slow = slow->next;
fast = fast->next->next;
if (slow == fast)
{
while (p != slow)
{
p = p->next;
slow = slow->next;
}
return p;
}
}
return nullptr;
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。