- 博客(21)
- 资源 (17)
- 收藏
- 关注
原创 二分查找C++详解
二分查找C++定义思想代码实现进阶指南定义首先我们来看一下二分查找的定义二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列思想可以看到我们用粗体勾画出来的部分顺序存储结构和 关键字有序 顺序存储结构表明我们的大部分应用场景是在数组中,关键字有序则表明了我们所处理的数据是一个有序序列综合两个条件,可以得到我们使用二分查找的场景为有序数组,请注意,这里的有序并不是指完全有序,部分有序也是可以考
2021-04-28 19:22:05 1678
原创 二分查找C++进阶元素查找
二分查找C++进阶元素查找题目链接思路分析解题代码题目链接元素查找思路分析题目意思解释过来说我们对原来已有有序的数组进行旋转,旋转之后我们再去查找里面是否存在我们期望的值,既然提到了查找,最容易想到的就是我们进行穷举遍历,这道题目同样可行,但是我们可以观察到我们旋转之后的数组是局部有序的就是说,我们把数组以旋转点分割成两部分,他们都是有序的,既然数组有序,那么我们能不能够尝试更加优秀的二分查找来解决这道问题,答案当然是可行的首先我们将旋转数组看成图中的形状既然要二分,那么显而易见的是,当我们
2021-04-27 22:33:32 378
原创 八大排序之归并排序C++详解
八大排序之归并排序C++详解题目链接思路分析解题代码题目链接这道题目链接是用来测试我们所写算法的正确性排序数组思路分析我们想利用这道题目来讲解归并排序,首先我们来看一下归并排序的定义归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。基本思想归并排序是用分治思想,分治模式在每一层递归上
2021-04-26 22:26:54 1472 1
原创 八大排序之快速排序C++详解/C++快速排序/快排
八大排序之快速排序C++详解题目链接思路分析解题代码题目链接这道题目链接可以用来测试我们所书写的算法是否正确 排序数组思路分析首先我们来看一些快速排序的定义快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。我们可以看到的是快速排序首先需要确定一个基准元素,然后经过一趟快
2021-04-26 22:11:38 5276 8
原创 力扣1011. 在 D 天内送达包裹的能力C++
力扣1011. 在 D 天内送达包裹的能力C++题目链接思路分析解题代码题目链接 在 D 天内送达包裹的能力思路分析对于这道题目,我们首先想到的第一种办法就是,我们的最大运载能力是所有包裹重量的和,那么最低运载能力就是1因此我们就可以使用便利的方法进行统计,统计出我们能满足D天内将所有货物搬运的最低运载能力对于运载能力进行考虑时,当我们想通过遍历进行处理时,当我们当前的重量和大于我们给出的最低运载能力时, 就说明一趟不能装完,因此在给出最低运载能力的条件下,我们运载天数需要+1,最后和D进行
2021-04-26 16:46:31 268
原创 牛客C++不要二
牛客C++不要二题目链接思路分析解题代码题目链接牛客C++不要二思路分析这道题目我们需要使用贪心的思想,我们先在第一个位置放置蛋糕,并同时将与该位置距离为2的位置置为-1,当我们之后遇到这个位置的我们就不进行考虑,我们局部最优就是在这一次尽可能多的放置蛋糕,以此来达到全局最优解题代码#include <iostream>#include <vector>using namespace std;int main(){ //我们使用贪心的思想,我们在棋盘
2021-04-25 17:38:34 176
原创 字符串相加C++
字符串相加C++题目链接思路分析解题代码题目链接字符串相加C++思路分析对于整数相加我们都很熟悉,因此我们需要整数相加进行分解,对于整数相加,我们从低位开始,进行相加,如果相加大于10,进位为1,相加如果小于10,进位为0因此我们借此考虑字符串加法,首先要有一个进位,我们初始化进位为0我们从字符串尾部开始,将两个字符串尾部相加, a = (len1 >= 0) ? num1[len1--] - '0' : 0; b = (len2 >= 0) ?
2021-04-25 17:24:31 2546
原创 牛客网剑指offer把字符串转换成整数C++
牛客网剑指offer把字符串转换成整数C++题目链接思路分析解题代码题目链接把字符串转换成整数思路分析我们对这道题目进行分析,如果我们想要将字符串转换为整数,那么我们首先就要考虑字符串中的空格,所以1: 去除字符串的首部空格 由于需要删除所有的空格, 所以我们需要使用循环处理在我们处理掉空格之后,我们观察示例可得字符串中有可能存在符号位,因为我们需要记录符号位2:记录符号位此时我们就可以开始存储数字了,我们将数字存储到一个新字符串中,稍后统一处理对于出现的其他字符,我们就认为输入不合法
2021-04-25 16:34:39 175
原创 剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表题目链接思路分析解题代码题目链接剑指 Offer 25. 合并两个排序的链表思路分析这道题目我们能需要引入一个头节点来方便我们进行运算我们先申请一个头节点作为我们新链表的第一个节点然后两个链表依次比较,谁小就加入新链表,最终返回头结点的next 就可以一定要记得释放内存,否则会导致会导致内存泄漏解题代码/** * Definition for singly-linked list. * struct ListNode { *
2021-04-21 21:10:52 131
原创 27. 移除元素
27. 移除元素题目链接思路分析解题代码题目链接27. 移除元素思路分析对于这道题目我们可以直接使用快慢指针进行求解,利用慢指针标记数组新的返回位置,利用快指针遍历数组具体解析可以参考leetcode26. 删除有序数组中的重复项解题代码class Solution {public: int removeElement(vector<int>& nums, int val) { //核心想法同昨天的每日一题一样,也是利用双指针方法进行求解
2021-04-19 10:57:37 81
原创 剑指 Offer 47. 礼物的最大价值C++
剑指 Offer 47. 礼物的最大价值题目链接思路分析解题代码题目链接剑指 Offer 47. 礼物的最大价值思路分析这道题目读到题目中的最大价值就应该联想到可能需要使用动态规划来对该问题进行求解由于我们拿礼物的方向只能是向右或者向下,所以每一格都面临着两种选择,要么选择向右,要么选择向下,我们自然是要选择这两者中较大的一个,详细解释写在代码的注释里面解题代码class Solution {public: int maxValue(vector<vector<in
2021-04-18 22:31:53 217
原创 剑指 Offer 54. 二叉搜索树的第k大节点
剑指 Offer 54. 二叉搜索树的第k大节点题目链接思路分析解题代码题目链接剑指 Offer 54. 二叉搜索树的第k大节点思路分析当我们看到二叉搜索树的时候,就要想着二叉搜索树的特殊性质,二叉搜索树的中序遍历是一个有序数组,中序遍历的遍历顺序是左中右,那么这样的数组顺序是递增的,因此我们考虑使用右中左,这样得到的数组顺序就是一个递减的数组,然后我们统计第K个数,就是我们想要的结果解题代码/** * Definition for a binary tree node. * stru
2021-04-18 19:06:01 131
原创 剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点题目链接思路分析解题代码题目链接剑指 Offer 22. 链表中倒数第k个节点思路分析思路1首先我们看到这道题目,第一种思路就是我们先遍历整个链表,得到链表长度,然后同理得到倒数第K个节点,然后从头部找到倒数第K个节点返回就可以得到结果思路2我们重点讲解思路2-- 这道题目与我们之前讲过的leetcode26. 删除有序数组中的重复项可以使用相同的方法,也是使用双指针,我们使用快慢指针,让快指针先走K步,然后快慢指针同时走,这样当快指针走到
2021-04-18 18:24:29 95
原创 leetcode26. 删除有序数组中的重复项
26. 删除有序数组中的重复项题目链接思路分析解题代码题目链接26. 删除有序数组中的重复项思路分析对于这道题目,题目着重强调了原地修改数组,意味着我们不能够申请额外的空间,只能够在原数组上做修改,那么我们就需要一个指针标记我们最终返回的新位置,一个指针区负责遍历整个数组因此我们的思路就比较清晰了,使用双指针,slow指针标记我们返回的数组尾的位置,如果slow指针和fast指针指向的数字相同,意味着我们fast指针需要后移去寻找第一个不同于slow指针指向的结果,当fast和slow指向
2021-04-18 17:37:58 161
原创 783. 二叉搜索树节点最小距离C++
783. 二叉搜索树节点最小距离题目链接思路分析解题代码题目链接783. 二叉搜索树节点最小距离思路分析本题题目给出了一个二叉搜索树,那么对于一个二叉搜索树,其对大特点就是二叉搜索树的中序遍历是一个有序数组,且数字排列为从小到大我们直接遍历树,就能够得到一个有序数组,然后我们就可以直接计算数组中的最小差值,由于我们数组排序为从小到大,所以不用考虑出现负值情况解题代码/** * Definition for a binary tree node. * struct TreeNode {
2021-04-13 19:17:11 155
原创 剑指 Offer 40. 最小的k个数C++
剑指 Offer 40. 最小的k个数C++题目链接思路分析解题代码题目链接剑指 Offer 40. 最小的k个数思路分析这是一道大厂常见题目,经常在面试中会遇到,下面介绍两种思路思路1可以直接使用sort方法,对数进行排序,然后把前k个数返回就可以思路2借助堆排序的思想,由于题目需要最小的K个数,因此我们可以先建立一个大小为K的大顶堆,然后将堆顶元素与未入堆的元素进行比较,如果该元素小于堆顶元素,则与之交换,重复此类过程,最终堆中数据就是最小的K个数解题代码class S
2021-04-12 19:12:28 183
原创 剑指 Offer 42. 连续子数组的最大和
剑指 Offer 42. 连续子数组的最大和题目链接思路分析解题代码题目链接剑指 Offer 42. 连续子数组的最大和思路分析题目的意思是求解子数组的最大和,那么显然,子数组最大和一定是大于等于0的我们假设数组首部作为我们的开始位置,当count小于0的时候,说明此时子数组之和已经小于0了,必然不可能作为我们的结果,因此需要把当前位置作为新的开始位置进行计算,sum就是每次取count的最大值,作为结果解题代码class Solution {public: int maxSu
2021-04-11 21:16:51 62
原创 剑指 Offer 55 - I. 二叉树的深度C++
剑指 Offer 55 - I. 二叉树的深度题目链接解题思路解题代码题目链接剑指 Offer 55 - I. 二叉树的深度解题思路该题我们需要从根节点开始,分别求解左右孩子的深度最终高度为左右孩子的高度中的较大值加上本层的1解题代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *
2021-04-11 20:59:26 212
原创 剑指 Offer 27. 二叉树的镜像C++
剑指 Offer 27. 二叉树的镜像题目链接思路分析解题代码题目链接剑指 Offer 27. 二叉树的镜像思路分析对于这道题目,我们需要交换根节点的两个孩子,然后分别交换左右孩子的孩子因此,显然我们需要使用递归地方式首先交换两个孩子节点,然后分别交换左右孩子终止条件就是我们遇到了空节点解题代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *
2021-04-11 20:49:31 245
原创 剑指 Offer 58 - II. 左旋转字符串C++
剑指 Offer 58 - II. 左旋转字符串C++题目链接思路分析解题代码题目链接剑指 Offer 58 - II. 左旋转字符串思路分析以示例1举例–>-----> ab cdefg<–<------ ba gfdec----->–> cd efgab解题代码class Solution {public: void reverse(string& str, int start, int end) {
2021-04-11 20:38:26 121
VS主题/程序员用VS主题
2021-05-29
自来水管道铺设问题建模与计算/最优化问题
2021-05-29
C语言配套练习题/C++练习题/C++课后题答案
2021-05-29
学生成绩管理系统C++.rar
2019-12-29
数据结构之二叉树链表.rar
2019-12-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人