- 博客(23)
- 收藏
- 关注
原创 17贪心算法Ⅲ
1,绝对值排序的实现,只需要重写sort函数的cmp方法,令cmp返回值按照绝对值较大的判断结果返回。2,cmp函数返回值要加修饰符static3,k值还有富裕的时候,因为始终要交换最后一个元素,所以只用判断k的奇偶性即可,若为偶数次交换相当于不处理,若为奇数,则反转一次即可。1.暴力法需要两层遍历,第一层是遍历第i个加油站作为起点,第二层遍历是从i开始算油耗是否支撑再走回i,环形遍历。while更适合环形遍历,因此第二层用while。
2022-12-27 09:47:49
650
1
原创 15贪心算法Ⅰ
贪心算法的前提是将供给和需求先排序,大的资源优先满足大需求,然后将满足数进行加和,即得到全局最优。1.在for循环里面,要先更新res的值,然后再重置子区间。2.贪心算法的体现就是之前区间的和
2022-12-23 15:16:58
733
原创 卡尔曼滤波原理及c++实现
卡尔曼滤波是一种最优估计算法。用处:1)利用可测量值估算无法测量的量。2)对有测量噪声的物理量进行估计。常用于制导和导航、计算机视觉等。状态估计器[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wyl6RMng-1671698056041)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20221222145125380.png)]
2022-12-22 16:35:08
1359
原创 14.回溯算法
对于组合问题,采用回溯的方法暴力搜索所有满足的方案。在暴力搜索时,利用for循环对集合本身遍历,实现横向搜索,利用递归实现对纵向符合要求的方案元素深度进行搜索,搜到以后利用回溯返回for循环对应的根节点,开启下一次搜索。溯的方法暴力搜索所有满足的方案。在暴力搜索时,利用for循环对集合本身遍历,实现横向搜索,利用递归实现对纵向符合要求的方案元素深度进行搜索,搜到以后利用回溯返回for循环对应的根节点,开启下一次搜索。
2022-12-15 16:34:27
872
原创 12.二叉树Ⅱ
给你二叉树的根节点 ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。解题思路队列先进先出,符合一层一层遍历的逻辑,而是用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。而这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。
2022-12-05 16:39:35
1336
转载 11.二叉树基础
刚刚我们说过了二叉树有两种存储方式顺序存储,和链式存储,顺序存储就是用数组来存,这个定义没啥可说的,我们来看看链式存储的二叉树节点的定义方式。int val;} };大家会发现二叉树的定义 和链表是差不多的,相对于链表 ,二叉树的节点里多了一个指针, 有两个指针,指向左右孩子。这里要提醒大家要注意二叉树节点定义的书写方式。在现场面试的时候 面试官可能要求手写代码,所以数据结构的定义以及简单逻辑的代码一定要锻炼白纸写出来。
2022-11-29 21:43:25
1605
转载 二叉树基础理论
确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。所以大家使用自己熟悉的编程语言写算法,一定要知道常用的容器底层都是如何实现的,最基本的就是map、set等等,否则自己写的代码,自己对其性能分析都分析不清楚!而广度优先遍历的实现一般使用队列来实现,这也是队列先进先出的特点所决定的,因为需要先进先出的结构,才能一层一层的来遍历二叉树。
2022-11-29 21:36:18
186
原创 10.栈与队列Ⅲ
本题第一反应用双指针做,写出了如下的代码,代码漏考虑了一旦滑窗移动,之前的max值可能出滑窗,因此某些测试案例无法通过。//存储结果max=0;i
2022-11-29 16:11:23
1889
原创 9.栈与队列Ⅱ
对于栈来说,若想访问栈顶元素,需要先判断栈不为空,不为空才能访问,否则会报错。没有一遍ac,错误在于:if判断相等写成了一个等号,size后面漏写了小括号。注意代码编写的严谨性,争取一次ac。由于测试案例中有极大数存在,因此存储的栈和运算的数字要定义成long long数据。将字符串转换为数字可以用stoi(string a)函数实现,返回的就是数值。
2022-11-28 20:50:26
1651
原创 8.栈和队列
队列两端开口,栈一端开口,因此用栈来模拟队列时需要用两个栈来实现,一个按照正常的入队顺序入栈a。另一个栈b按照a出栈的顺序将元素放入栈b,就实现了对栈a元素的逆序。这样出栈b顶端的元素就相当于出队头的元素。对于pop操作,需要记录队头元素,作为返回值。
2022-11-27 17:39:55
1751
原创 7.字符串总结
其实在基本操作上没有区别,但是 string提供更多的字符串处理的相关接口,例如string 重载了+,而vector却没有。所以想处理字符串,我们还是会定义一个string类型。
2022-11-27 11:34:22
1562
原创 6.字符串1
给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。如果剩余字符少于k个,则将剩余字符全部反转。如果剩余字符小于2k但大于或等于k个,则反转前k个字符,其余字符保持原样。输入:s = "abcdefg", k = 2输出:"bacdfeg"请实现一个函数,把字符串s中的每个空格替换成"%20"。输入:s = "We are happy."输出:"We%20are%20happy."给你一个字符串s,请你反转字符串中单词的顺序。单词。
2022-11-27 10:57:56
1724
原创 哈希表(二)
ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成。如果可以,返回true;否则返回false。magazine中的每个字符只能在ransomNote中使用一次。输入:ransomNote = "a", magazine = "b"输出:false未看讲解,按自己思路写的,但是没有一遍ac。出bug的点在于vector初始化又写错了切记,一维vector初始化按照如下写法,用小括号,因为调用了构造函数二维vector定义及初始化按如下写法。
2022-11-26 13:31:15
1787
原创 第三章:哈希表
数组也是一种哈希表,下标代表key键值,元素值代表value。统计英文字母出现次数就可以用哈希表来记录,键值key对应英文字母的排序,value记录字母出现的次数。可以用s[i]-'a’将字符的ascii码转换为数组下标。编程时一定要先看返回值类型。本题的交集结果存储在set中,但是题目要求返回的是vector,最后在给返回值是要将set转化为vector。遍历数组时,可以用for :这种写法set的find函数返回的是迭代器,若找到,返回的是指向该元素的迭代器。若未找到,返回的是集合end的迭代器。
2022-11-24 09:58:55
2020
原创 链表二交换元素和删除元素
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
2022-11-22 22:30:14
2189
原创 第一章 数组
1)数组遇到需要从两个方向同时比较的情况,考虑用双指针或双下标的方法2)在不遍历数组的情况下能够获取数组的头尾数据,灵活运用两端的数据,正序或倒序遍历、输出数组均可。注意,在遍历数组时,是用滑窗的尾下标来遍历,依次计算窗口尾部在0,1,2.。。。位置的情况。滑动的是窗口的头下标,不断移动头下标,判断是否还满足要求。在考虑返回值时,需要考虑如果窗口长度始终没有更新,说明没有符合条件的子数组,因而要返回0.这也是为什么初始化返回值时需要设置的比数组长度大。
2022-11-21 10:20:49
2106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人