贪心算法

贪心算法(常用知识点)

基本思想:层层分解,寻找最优解。
关键:寻找贪心标准,寻找局部最优解。
步骤;
1.判断是否符合贪心策略。
2.寻找贪心标准,寻找局部最优解
3.设计函数,确定参数。
补充材料
什么是迭代器点击查看
1.标准库string类 头文件< string > cin>>s; getline(cin,line)(可输入带空格,回车键)
string最好用就是可以整体输入输出赋值等等感觉就是对字符串型的整数进行操作。
常用操作:
1.length() ( s.size() ):求字符串长度。
2.indexOf():求某个字符在字符串中的位置。
3.charAt():求一个字符串中某个位置的值。
4.equals():比较两个字符串是否相同。
5.replace():将字符串中的某些字符串替换掉。
6.split():根据给定正则表达式的匹配拆分此字符串。
7.substring():输出一个新的字符串。
8.trim():将字符串开头的空白(空格)和尾部的空白去除。
9.format():点击查看具体用法
10.toLowerCase():将字符串中的字符全转化为小写。
11.toUpperCase():将字符串中的字符全转化为大写。

2.栈(Stack)< stack >只有一个出口先进后出。
定义方法: stack<date_type>stack_name;
1.top():返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。
2.push(date_type a):可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。
3.pop():弹出栈顶元素,直接删除栈顶元素,并没有返回该值哦。
4.size():返回栈中元素的个数。
5.empty():在栈中没有元素的情况下返回 true
6.emplace():用传入的参数调用构造函数,在栈顶生成对象。
7.swap(stack & other_stack):将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。特例化的全局函数 swap()

3.队列(queue)< queue >底端输入元素从顶端输出元素。
定义方法:queue<date_type>queue_name;
1.queue入队,如例:q.push(x); 将x 接到队列的末端。
2.queue出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
3.访问queue队首元素,如例:q.front(),即最早被压入队列的元素。
4访问queue队尾元素,如例:q.back(),即最后被压入队列的元素。
5.判断queue队列空,如例:q.empty(),当队列空时,返回true。
6.访问队列中的元素个数,如例:q.size()
**优先队列(priority_queue)**主要区别就是最大权值放在最头头;定义方法差不多
操作方面:基本类似,q.top()返回优先队列的下一个元素。
生成队列
头文件
bool next_permutation(begin,end);改变区间元素,产生下一个排列。
bool prev_permutation(bedin,end);产生前一个排列。

4.sort函数和reverse函数和upper_bound函数和lower_bound函数
头文件都是< algorithm >
sort(begin,end)默认从小到大排列。
sort(begin,end,cmp)按照自己定义的cmp排列。
reverse(bedin,end)元素逆序排列。
upper_bound(bedin,end,value)返回>value的元素的第一个位置。
lower_bound(bedin,end,value)返回>=value的元素的第一个位置。

5.vector动态数组< vector >定义方法:vector<date_type>vector_name 我觉得是个好用的好东西,是一个可以存放任意类型的动态数组,能够增加和压缩数据。
1.v.empty() 返回bool型,表示vector是否为空(v.empty() )
2.v.size() 返回vector内元素个数 (v.size() )
3.v.push_back(data_typea) 将元素a插入最尾端
4.v.pop_back() 将最尾端元素删除
5.vec.clear() 清空
6.vec.insert(vec.begin()+i,a) 在第i+1个元素前面插入a;
7.vec.erase(vec.begin()+2); 删除第3个元素
8.vec.erase(vec.begin()+i,vec.end()+j) 删除区间[i,j-1];区间从0开始
9.v[i] 类似数组取第i个位置的元素(v[0])
注意事项
1、如果你要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效率会很低。
2、Vector作为函数的参数或者返回值时,需要注意它的写法:
double Distance(vector&a, vector&b) 其中的“ & ”绝对不能少!

6.set和multiset和map和multimap
set和multiset:点击查看区别和应用
点击查看简单使用
map和multimap:点击查看简单使用

解决问题
装箱问题,背包问题等类似问题就是定义一个结构体其中可能用到动态数组各种类型,string,int,double等等调用sort函数用自己定义的cmp排序,进而解决问题。最短前缀等类似问题应该运用string代码比较简洁,多定义几组可以进行记录,做判断,做标记等等。对于个别题直接写感觉难的,可以试试逆向思维,或者转化条件。对于数据类型定义,动态数组vector有很多的优点。代码我一般是使用c++输入输出流解决问题。

自我总结
这个星期老师补充的材料对于小白的我,全是新知识希望自己学着去用这些新知识去写代码以此尽快掌握这些新知识。对于sort,string,vector等补充材料知识点我已经比较少熟悉,其他的知识点还没去使用解题,只是单纯得知道这个知识点。毕竟知道并不意味这会使用,懂得运用知识点是很关键。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值