第三周学习体会

一、知识点
1、STL学习总结
栈(stack)
栈是一种先进后出的数据结构,它只有一个出口,只能操作最顶端元素。类似于木桶,只能从顶端放入,顶端取出。
用法:
头文件:#include
定义:stacka;
操作:a.empty():当栈内为空时返回值为1,非空是返回值为0。
a.size():返回栈内元素个数。
a.push():向栈内压入一个元素。
a.pop():去除栈顶元素。
a.top():访问栈顶元素。

队列(queue)
队列时一种先进后出的数据结构,从底端加入元素,顶端取出元素。类似平常生活中的排队情况。
用法:
头文件:#include
定义:queuea;
操作:a.empty():判断队列是否为空,返回值为bool类型。
a.size():返回队列内元素个数。
a.push():向队尾压入一个元素。
a.pop():移除队首元素。
a.front():返回队列中的第一个元素(队首)。
a.back():返回队列内最后一个元素(队尾)。

优先队列(priority_queue)
一个拥有权值观念的queue,自动依照元素的权值排列,权值最高排在前面。缺省的情况下,priority_queue是利用一个max_heap完成的。
头文件:#include
定义:priority q;
操作:q.push(elem):将元素elem置于优先队列。
q.top():返回优先队列的下一个元素。
q.pop():移除一个元素。
q.size()返回队列中元素的个数。
q.empty():返回优先队列是否为空。

集合(set)
头文件:#include
定义:sets;
用法:s.begin():返回只想第一个元素的迭代器。
s.clear():清除所有元素。
s.count():返回bool型,有返回1,无返回0.
s.end():返回只想最后一个元素之后的迭代器,不是最后一个元素。
s.erase():删除集合中元素。
s.find():返回一个指向被查找的元素的迭代器,如果没有找到则返回end()。
s.insert():在集合中插入元素。
s.size():集合中元素数目。
s.swap():交换两个集合变量。
s.max_size():返回集合所能容纳的最大元素数量。
s.find:因为在set中每一个键值只会出现0或1次,所以count()就显得有点多余,二find()则是查找括号中的给定值,若没有找到则返回end()。
注意:在set中每个元素的值都唯一并且系统会自动对set内的元素排序,在实际应用中一般会去对string类排序。

STL泛型算法reverse(反转容器)
头文件:#include
它可以交换vector容器中元素顺序。
例:

vector<int>a={1,2,3,4,5};
reverse(a.begin(),a.end());

这经常会被用于对string类的处理,这会使得操作非常的简便。

unique
头文件:#include
功能:可以进行元素去重。原理是将相邻的重复元素去掉多余的只保留一个,实则是将要去掉的元素放到容器末尾。最后返回不重复元素序列的最后一个值的地址。

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
    int n[10]={1,1,1,3,3,5,5,7,7,8};
    vector<int>a;
    for(int i=0;i<10;i++)
      a.push_back(n[i]);
    vector<int>::iterator b=a.begin();
    vector<int>::iterator c=a.end();
    int len=a.size();
    for(int i=0;i<len;i++)
      cout<<a[i]<<" ";
    cout<<endl;
    sort(b,c);
    a.erase(unique(b,c),c);//或者可以写成a.erase(unique(a.begin(),a.end()),a.end());
    int s=a.size();
    for(int i=0;i<s;i++)
      cout<<a[i]<<" ";
    return 0;
}

输出

1 1 1 3 3 5 5 7 7 8
1 3 5 7 8
Process returned 0 (0x0)   execution time : 0.244 s
Press any key to continue.

以上是一个简单的示例,一般unique使用前都要对容器内元素排序

2、upper_bound(begin,end,value):返回>value的元素第一个位置(满足条件)
lower_bound(begin,end,value):返回>=value的元素第一个位置(满足条件的下一个位置/不满足条件的第一个位置)。
lower_bound-upper_bound:满足条件的元素个数。

3、前缀和

forint i=1;i<=n;i++)
{
  cin>>a[i];
  sum[i]=sum[i-1]+a[i];
}

上述这组代码就是求出了前缀和,他是一种重要的预处理,能大大降低查询的时间复杂度,可以求出在i=1到i=n区间内的某两个区间的数据。

二、题目
Sorting by Swapping
描述
Given a permutation of numbers from 1 to n, we can always get the sequence 1, 2, 3, …, n by swapping pairs of numbers. For example, if the initial sequence is 2, 3, 5, 4, 1, we can sort them in the following way:

2 3 5 4 1
1 3 5 4 2
1 3 2 4 5
1 2 3 4 5

Here three swaps have been used. The problem is, given a specific permutation, how many swaps we needs to take at least.
输入
The first line contains a single integer t (1 <= t <= 20) that indicates the number of test cases. Then follow the t cases. Each case contains two lines. The first line contains the integer n (1 <= n <= 10000), and the second line gives the initial permutation.
输出
For each test case, the output will be only one integer, which is the least number of swaps needed to get the sequence 1, 2, 3, …, n from the initial permutation.
样例输入
2
3
1 2 3
5
2 3 5 4 1
样例输出
0
3

错误代码:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int t;
    vector<int>a;
    cin>>t;
    while(t--)
    {
        int n;
        int num=0;
        cin>>n;
        for(int i=1;i<=n;i++)
        cin>>a[i];
        for(int i=0;i<=n;i++)
        {
            while(a[i]!=i)
            {
                swap(a[i],a[a[i]]);
                num++;
            }
        }
        cout<<num<<endl;
    }
    return 0;
}

这道题我想通过看a[i]是否与i相同来判断是否应该调换顺序,但是oj提交之后是Runtime error,是由于数组越界导致的,我忽略了vector动态数组是从0开始,还有在用STL时尽量不要使用swap这类函数,我把vector数组换成了普通的数组就ac了

正确代码如下:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int t;
    vector<int>a;
    cin>>t;
    while(t--)
    {
        int n;
        int num=0;
        cin>>n;
        for(int i=1;i<=n;i++)
        cin>>a[i];
        for(int i=0;i<=n;i++)
        {
            while(a[i]!=i)
            {
                swap(a[i],a[a[i]]);
                num++;
            }
        }
        cout<<num<<endl;
    }
    return 0;
}

三、总结
通过做递归和贪心这些题,我发现我的基础知识不是很牢固,STL的知识在做题中运用得不熟练,在课上也会时常出现听不懂的现象。由于我之前没有接触过这样的专业知识,所以我应该注重基础的掌握并且像费老师在课上说的那样:选择一件事就要全身心的投入去做。相信在我的努力下,我终将会功课这些难关。

在探索智慧旅游的新纪元中,一个集科技、创新与服务于一体的整体解决方案正悄然改变着我们的旅行方式。智慧旅游,作为智慧城市的重要分支,旨在通过新一代信息技术,如云计算、大数据、物联网等,为游客、旅游企业及政府部门提供无缝对接、高效互动的旅游体验与管理模式。这一方案不仅重新定义了旅游行业的服务标准,更开启了旅游业数字化转型的新篇章。 智慧旅游的核心在于“以人为本”,它不仅仅关注技术的革新,更注重游客体验的提升。从游前的行程规划、信息查询,到游中的智能导航、个性化导览,再到游后的心情分享、服务评价,智慧旅游通过构建“一云多屏”的服务平台,让游客在旅游的全过程中都能享受到便捷、个性化的服务。例如,游客可以通过手机APP轻松定制专属行程,利用智能语音导览深入了解景点背后的故事,甚至通过三维GIS地图实现虚拟漫游,提前感受目的地的魅力。这些创新服务不仅增强了游客的参与感和满意度,也让旅游变得更加智能化、趣味化。 此外,智慧旅游还为旅游企业和政府部门带来了前所未有的管理变革。通过大数据分析,旅游企业能够精准把握市场动态,实现旅游产品的精准营销和个性化推荐,从而提升市场竞争力。而政府部门则能利用智慧旅游平台实现对旅游资源的科学规划和精细管理,提高监管效率和质量。例如,通过实时监控和数据分析,政府可以迅速应对旅游高峰期的客流压力,有效预防景区超载,保障游客安全。同时,智慧旅游还促进了跨行业、跨部门的数据共享与协同合作,为旅游业的可持续发展奠定了坚实基础。总之,智慧旅游以其独特的魅力和无限潜力,正引领着旅游业迈向一个更加智慧、便捷、高效的新时代。
内容概要:本文详细介绍了大模型的发展现状与未来趋势,尤其聚焦于DeepSeek这一创新应用。文章首先回顾了人工智能的定义、分类及其发展历程,指出从摩尔定律到知识密度提升的转变,强调了大模型知识密度的重要性。随后,文章深入探讨了DeepSeek的发展路径及其核心价值,包括其推理模型、思维链技术的应用及局限性。此外,文章展示了DeepSeek在多个行业的应用场景,如智能客服、医疗、金融等,分析了DeepSeek如何赋能个人发展,具体体现在公文写作、文档处理、知识搜索、论文写作等方面。最后,文章展望了大模型的发展趋势,如通用大模型与垂域大模型的协同发展,以及本地部署小模型成为主流应用渠道的趋势。 适合人群:对人工智能和大模型技术感兴趣的从业者、研究人员及希望利用DeepSeek提升工作效率的个人用户。 使用场景及目标:①了解大模型技术的最新进展和发展趋势;②掌握DeepSeek在不同领域的具体应用场景和操作方法;③学习如何通过DeepSeek提升个人在公文写作、文档处理、知识搜索、论文写作等方面的工作效率;④探索大模型在特定行业的应用潜力,如医疗、金融等领域。 其他说明:本文不仅提供了理论知识,还结合实际案例,详细介绍了DeepSeek在各个场景下的应用方式,帮助读者更好地理解和应用大模型技术。同时,文章也指出了当前大模型技术面临的挑战,如模型的局限性和数据安全问题,鼓励读者关注技术的持续改进和发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值