目录

P2P 的开拓者

世界上第一家网吧

俄罗斯人用什么搜索引擎?

将数据流变为多个不相交区间

难倒数万人的小学数学题

环形链表 II


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]]

提示:

  • 0 <= val <= 104
  • 最多调用 addNum 和 getIntervals 方法 3 * 104 次

进阶:如果存在大量合并,并且与数据流的大小相比,不相交区间的数量很小,该怎么办?

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;elsecout << "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;}
};

每日一练--IT冷知识C/C++--第四天相关推荐

  1. 每日一练--IT冷知识C/C++--第八天

    目录 讽刺的名字 Unix 诞生 RISC-V 的掌门人 计算出现次数最多的整数及其出现次数 字符串相乘 找x 讽刺的名字 Symantec 公司曾发布一款个人信息安全产品 Norton Antivi ...

  2. 每日一练--IT冷知识C/C++--第二天

    目录 <纸牌屋>是谁制作的? 格式化后的时钟 Win 8 保留的东西 从前序与中序遍历序列构造二叉树 分割回文串 克隆图 <纸牌屋>是谁制作的? 1960 年 10 月 8 日 ...

  3. PMP试题 | 每日一练,快速提分(十四)

    PMP试题 | 每日一练,快速提分(十八) 2021-12-27 14:20·Young 嗨 PMP的知识点最终是要以考试题的形式出现的,而且PMP考试题量很大,平均只有1分钟做一道题,因此必须通过大 ...

  4. oppo手机隐藏的计算机冷知识,OPPO手机的四个隐藏小技巧, 你会用几个?

    作为现在国内热度最高的手机之一,oppo的用户群可以说是非常大的,而很多人购买OPPO手机原因大多是它的高颜值以及出色的拍照体验.不过以下四个实用的使用技巧,不知道众多的OPPO用户掌握了没有. 一防 ...

  5. 小米计算机弹歌曲,趣味冷知识!小米的T9拨号键盘可以弹乐曲,没想到吧!快来试试!...

    小伙伴们,大家好,小编是[漫画与笑话每一天],今天要为大家介绍的是:冷知识,它可以让人增长见识,开阔视野,还能启迪思维,引发强烈求知欲.和"冷笑话"属于另类幽默一样,冷知识虽冷门但 ...

  6. IT冷知识--每日一练

    目录 一.IT冷知识--每日一练 战火中的程序员 讽刺的名字 爱,死亡和机器人 浏览器的新时代 C++ 的类型是什么? <纸牌屋>是谁制作的? 盖茨的游戏梦 第一次冒险 铭记一生的悲剧 蠕 ...

  7. 2022年二级建造师建设工程法规及相关知识考试每日一练及答案

    题库来源:优题宝公众号 2022年二级建造师建设工程法规及相关知识考试每日一练及答案,由优题宝公众号根据最新二级建造师建设工程法规及相关知识考试大纲与历年二级建造师建设工程法规及相关知识考试真题汇总编 ...

  8. VBA每日一练(4),补充VBA的基础语句知识,基本控制结构,I/O基础

    一 编程的基础知识 1.1 编程基础知识 程序的构成 程序的构成(表面):很多语句 程序的构成(本质):数据,代码 程序的构成(过程构成)---I/O:输入 input,数据处理,输出  output ...

  9. python 编程一日一练-python每日一练

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 过滤掉列表中的负数 筛选出字典{lilei: 79,jim: 88,lu ...

最新文章

  1. linux gdb#039;查找寄存器地址,【Linux跟踪和调试】gdb
  2. linux scp密码参数,使用scp命令安全地传输带有参数的文件
  3. rtrim php,php rtrim() 格式化中文问题
  4. Python之网络编程(TCP套接字与UDP套接字)
  5. 使用Excel函数时,注意函数对于大小写的区分(vlookup函数不区分大小写)
  6. 2208: [Jsoi2010]连通数(Trajan+bitset)
  7. Ajax Control Toolkit 控件介绍
  8. flash activex java_adobe flash player activex
  9. 三峡大学 计算机学院 刘洋,三峡大学科技学院2016年预科内升本专业分流结果公示...
  10. 如何通过 onstat 命令监控GBase8s数据库
  11. Java中dynamic是什么_java中dynamic web project与web project 的区别
  12. Golang程序调试 -- 内存泄漏pprof工具
  13. 全自动苹果CMS火车头采集器,苹果CMS火车头发布插件
  14. day11 - 每日总结及作业
  15. 人工智能行业源代码防数据防泄密需求分析
  16. 程序员要注重沟通能力的提升
  17. 微软人工智能-深度学习框架和工具.md
  18. Github中常见单词使用意思
  19. 数学历史上的三次危机
  20. Python调用win32api

热门文章

  1. translate翻译加载缓慢的解决办法(内附插件库官方下载地址)
  2. 用数据分析计算分期消费利率
  3. python quit()讲解_看完本文若不能让你学通“Python”,我将永远退出编程界
  4. HDU 2983 Integer Transmission
  5. Facebook将其未来押在元宇宙上——但它到底是什么?
  6. 设计模式---访问者模式
  7. 游戏王千金囊开发实录三—— 主窗体(自选试题)
  8. (转)---iPhone应用程序编程指南
  9. openGL第一讲——历史
  10. 第三届中国CEO新年峰会参会感想三