自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 (传智QT)L01 QT概述

QT概述

2023-02-02 18:08:30 669 1

原创 (侯捷C++)1.2面向对象高级编程(上)

面向对象高级编程(上) -- string类

2023-01-22 18:57:42 927

原创 (侯捷C++)1.1面向对象高级编程(上)

面向对象高级编程(上) -- Complex类讲解

2023-01-19 16:03:54 987

原创 (黑马C++)L09 C++类型转换 异常 输入输出流

C++类型转换 异常 输入输出流

2023-01-16 14:53:58 612

原创 (黑马C++)L08 C++模板

C++模板

2023-01-14 15:32:42 920

原创 (黑马C++)L07 多态

多态

2023-01-05 19:07:03 340

原创 (黑马C++)L06 重载与继承

重载与继承

2023-01-02 15:05:52 491

原创 (黑马C++)L05 运算符重载

运算符的重载

2022-10-20 11:53:04 481

原创 (黑马C++)L04 C++对象模型

C++对象模型

2022-10-09 15:10:51 534

原创 (黑马C++)L03 对象的构造和析构

对象的构造和析构

2022-09-28 20:28:16 544

原创 (黑马C++)L02 类 内联函数 函数重载

类的基本用法、内联函数以及函数重载

2022-09-18 12:45:54 506

原创 (黑马C++)L01 C++概述

C++概述

2022-09-16 17:52:44 1220 2

原创 (课程笔记)C++后端知识点大纲

C++后端知识点大纲

2022-09-07 14:29:59 261

原创 最小好进制

以字符串的形式给出 n , 以字符串的形式返回n的最小 好进制,如果n的k(k>=2) 进制数的所有数位全为1,则称 k(k>=2) 是n的一个好进制 。思路:假设k为n的最小好进制,则一定满足以下条件:(1)1+k*1 + k^2 +...+k^m = n根据上面的式子可以知道k^m<n;(2)由二项式公式:(x+y)^n = c(n,0)y^0*x^n + c(n,1)y^1*x^(n-1) + ...因此(k+1)^m = c(n,0)k^0 + c(n,1)

2022-03-06 20:49:08 323

原创 操作系统--操作系统的基本概念

熟悉的操作系统:MacOS,IOS;Windows,Andriod;Linux;NOKIA symbian。操作系统的概念(定义)--什么是操作系统 操作系统的功能和目标 -- 操作系统要做些什么1.定义:操作系统(OS)是控制和管理整个计算机系统的软件和硬件资源,并合理的组织和调度计算机的工作和资源的分配,以提供给用户和其他软件方便的借口和环境。它是计算机系统中最基础的系统软件。2.功能:文件管理 存储器管理 -- 执行程序之前需要将程序放入内存 处理机管理 -- 对应的程序被

2022-03-06 18:21:03 383

原创 几种经典排序算法的实现

1.冒泡排序(从小到大)两两比较相邻的数字,如果左边比右边大就进行交换。每进行一趟排序可把最大值放在最右边。//1.冒泡排序void bubble(vector<int> arr, int n) { int i; int tmp; for(int i = 0; i<=n-1; i++) { if(arr[i] > arr[i+1]) { tmp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = tmp; }

2022-03-05 17:52:44 193

原创 两个字符串的删除操作

给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例如下:动规五部曲:(1)dp数组及下标含义dp[i][j] 表示为使以 i-1 为下标的word1和 j-1 为下标的word2的相同的最小步数。(2)确定递推公式当word1[i-1] 和 word2[j-1]相同时,只有一种情况,此时dp[i][j] = dp[i-1][j-1]。 当word1[i-1] 和 word2[j-1]不同时

2022-02-27 17:59:04 343

原创 买卖股票的zui佳时机

1.买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格,只能选择 某一天 买入这只股票,并选择在未来的某一个不同的日子 卖出该股票。设计一个算法来计算能获取的最大利润。返回你可以从这笔交易中获取的最大利润,如果不能获取任何利润,返回 0 。动态规划五部曲:(1)dp数组及下标含义dp[i][0]表示第i天持有股票所得现金,dp[i][1]表示第i天不有股票所得现金。(2)确定递归函数确定dp[i][0]:若第i

2022-02-25 15:20:58 816

原创 打家劫舍II

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,能够偷窃到的最高金额,示例如下:因为可能会成环,所以需要考虑三种情况:(1)不包含收尾的最大值(2)只包含首,不包含尾的最大值(3)只包含尾,不包含首的最大值后两

2022-02-23 20:48:13 87

原创 多重背包理论基础

多重背包问题有N种物品和容量为V的背包,第i种物品最多有Mi件可用,每件物品占空间为Ci,价值为Wi,求解哪些物品放入背包可使价值总和最大。多重背包问题可以转化为01背包问题,将多重背包问题中的Mi件物品摊开就是一个01背包问题,且每个物品只用一次,实现代码如下:void test_multi_pack() { vector<int> weight = {1,3,4}; vector<int> value = {15,20,30}; vector<int>

2022-02-23 18:25:37 88

原创 完全背包理论基础

完全背包:有N个物品和一个最多背重量为W的背包,每个物品的重量为weight[i],价值为value[i],每件物品都有无限个,求解将这些物品放入背包的最大价值总和。01背包和完全背包的区别体现在遍历顺序上:for(int i = 0; i < weight.size(); i++) { // 遍历物品 for(int j = bagWeight; j >= weight[i]; j--) { // 遍历背包容量 dp[j] = max(dp[j], dp[j

2022-02-19 17:17:00 441

原创 最后一块石头的重量

有一堆石头,每块石头的重量都是正整数,每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎; 如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。思路:将石头分成重量最相近的两小堆,相撞之后石头的重量最小。转化为01背包问题:物品的重量为ston...

2022-02-18 19:04:12 108

原创 背包问题之01背包

背包问题中掌握01背包问题和完全背包问题就已经足够,背包问题可以如下分类:很多问题可以转化为背包问题来解决。01背包:有n件物品和一个能背重量为W的背包。第i件物品的重量为weight[i],得到的价值为value[i],每件物品只能用一次,求解背包能获得的最大价值。使用动态规划求解,动态规划五部曲如下:(1)确定dp数组及下标使用二位数组dp[i][j]表示从下标[0 - i] 的数组任意取,放进容量为j的背包,价值总和最大为多少。(2)确定递推表达式不放物品i:不放物品i

2022-02-18 15:22:20 502

原创 不同路径II

1.不同路径一个机器人位于一个 m*n 网格的左上角,机器人每次只能向下或者向右移动一步,机器人试图达到网格的右下角,问总共有多少条不同的路径?示例如下:到达每个格子的状态与他上面和左边格子有关,所以可以使用动态规划。动态规划五部曲:(1)dp数组和下标含义dp[i][j] 表示为到(i,j)有多少条不同的路径。(2)确定递归公式dp[i][j] 只能通过dp[i-1][j]向下行走或dp[i][j-1]向右行走,所以dp[i][j] = dp[i-1][j] + dp[

2022-02-17 18:43:57 558

原创 使用最小花费爬楼梯

给定一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦支付此费用,即可选择向上爬一个或者两个台阶,可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯,计算并返回达到楼梯顶部的最低花费。本题需要实用动态规划,接下来根据动态规划五部曲来确定:(1)确定dp及下标含义dp数组应确定为最小花费数组,dp[i] 表示到达第 i 层的最小花费。(2)确定递推公式第 i 层可以通过 i-1 层向上一步或第i - 2 层向上两步到达,所以dp[i] = m

2022-02-17 15:36:09 511

原创 动态规划基础知识

1.基础知识动态规划简称DP,主要用于解决有重叠子问题的问题,动态规划的每一个状态都是由上一个状态推导出来的,而贪心算法没有状态推导,是直接从局部直接选最优的。2.DP问题的解题步骤(1)确定dp数组以及下标含义(2)确定递推公式(3)dp数组的初始化(4)确定遍历顺序(5)举例推导dp数组...

2022-02-17 13:55:08 187

原创 买卖股票的时机II

给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格,在每一天,可以和/或出售股票,但在任何时候最多只能持有一股股票,能获得的最大利润 。解题的关键在于利润是可以分解的,如第一天卖出第三天买入的利润为:prices[3] - prices[0],相等于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0]),所以我们只需要计算相邻两天的利润,将大于0的利润全部加起来就是最大的总利润。

2022-02-13 20:06:09 168

原创 分饼干问题

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。解题思路:为了满足尽可能多的孩子就要把大饼干优先分给胃口大的孩子,这里的局部最优是优先把大饼干分给胃口大的孩子,可以使用贪心策略。步

2022-02-12 17:25:35 1016

原创 贪心算法的基础知识

1.贪心的概念:贪心的本质是选择每一个阶段的局部最优,从而达到全局最优。可以靠自己手动模拟,如果模拟可行可以试一试贪心策略,如果不可行可能需要动态规划。做题时手动模拟一下感觉局部最优可以推出全局最优而且想不到反例可以使用贪心。2.贪心的一般解题步骤:(1)把问题分解为若干个子问题(2)找出合适的贪心策略(3)求解每个问题的最优解(4)将局部最优解堆叠成全局最优解...

2022-02-12 11:41:57 2563

原创 解数独问题

N皇后问题每行每列只放一个皇后,所以只需要for循环遍历一行,递归来遍历列,确定皇后位置,而棋盘的每个位置都要放一个数字并检查是否合法。回溯三部曲:(1)函数参数及返回值:返回值为bool型,因为每找到一个符合的条件就立刻返回。(2)终止条件:等数填满自然就终止。(3)单层搜索逻辑:需要一个二维递归,一个for循环遍历棋盘的行,一个for循环遍历棋盘的列,递归遍历数字的可能性。//解数独bool backtracking(vector<vector<char>&gt

2022-02-11 21:07:10 70

原创 N皇后问题

给定一个整数 n,返回所有不同的 n 皇后问题的解决方案,每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。示例如下:n皇后问题是使用回溯算法解决的经典问题,皇后们的约束条件:1.不能同行2.不能同列3.不能走斜线搜索皇后的位置可以抽象为一棵二叉树,二维矩阵的高就是数的高度,矩阵的宽度就是树形结构中每个点的宽度。只要到了叶子节点说明找到了皇后们的合理位置。回溯三部曲:(1)确定参数及返回值:返回类型为void型,参数n为

2022-02-11 19:52:33 768

原创 重新安排行程

给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始,假定所有机票至少存在一种合理的行程。且所有的机票 必须都用一次 且 只能用一次。示例如下:题目需要解决的几个问题:(1)一个行程中,如果航班处理不好容易变成一个圈,进行死循环(2)存在多个路径,字母排序在前的排在前面(3)需要遍历一个机场对应的所有机场解决

2022-02-11 17:32:06 326

原创 回溯法之全排列II

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。与前面组合问题II子集问题II一样,有重复元素需要进行树层间去重,实现代码如下:vector<int> vec;vector<vector<int>> result;void backtracking(vector<int>& nums, vector<bool>& used) { //终止条件 if(vec.size()

2022-02-11 11:32:53 272

原创 回溯法之全排列问题

给定一个没有重复数字的序列,返回其所有可能的全排列,示例如下:1.抽象成树形结构回溯三部曲:(1)参数及返回值:排列是有序的,这是不同于集合和子集的情况,所以处理问题不再需要start,而是需要一个used数组,标记已经选择的元素,返回类型为void。(2)确定终止条件:当单个结果数组的长度与给定数组的长度相等时,说明到达了叶子节点,可以保存结果并返回。(3)单层递归的逻辑:排列问题每次都要从头开始搜索。实现代码如下://全排列vector<int> ve

2022-02-11 11:18:10 765

原创 回溯法之子集II

给定一个整数数组 nums ,其中可能包含重复元素,返回该数组所有可能的子集(幂集)。该题与上一篇文章求子集最大的区别是 nums 中包含重复元素,所以需要进行去重,与组合问题II中的去重一样,需要进行的是树层去重而不是树枝去重,所以需要增加一个 used 数组记录元素的使用情况,在去重之前要对数组进行排序。去重操作在组合问题II中,求子集问题在上篇文章中,该题实现代码如下://子集II--包括重复元素vector<int> vec;vector<vector<in

2022-02-10 17:57:30 88

原创 回溯法之求子集问题

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点。回溯三部曲:(1)函数的参数和返回值:参数需要数组和开始下标,返回类型为void。(2)确定终止条件:剩余集合为空时就返回。(3)单层搜索逻辑:求子集问题不需要剪枝,因为子集就是要遍历整棵树。实现代码如下://子集vector<int> vec;vector<vector<int>> result

2022-02-10 17:39:58 1258

原创 回溯法之分隔回文串

给定一个字符串s ,将 s 分割成一些子串,使每个子串都是回文串 。返回 s 所有可能的分割方案。切割问题也可以抽象为一棵树形结构图,如下图所示:递归用来纵向遍历,for循环用来横向遍历,切割线切割到字符串的末尾位置。回溯三部曲:(1)确定参数和返回值:一维数组存放单一结果,二维数组存放最终结果,参数需要start,因为不能重复切割。(2)终止条件:起始位置大于等于字符串的大小,保存结果并返回。(3)单层搜索的逻辑:收集单一结果。实现代码如下://分割回文串vecto

2022-02-10 11:00:00 211

原创 回溯法之组合总和II

给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合,candidates 中的每个数字在每个组合中只能使用一次。本题与组合总和有两个区别,数组中有重复元素并且数组中每个元素只能使用一次。需要去重的是同一树层上的使用过,树枝上的使用过不用去重,加入bool型的used数组辅助进行去重操作。回溯三部曲:(1)参数及返回值:返回值为void型,参数后序过程中确定。(2)终止条件:当组合和等于target值是就

2022-02-09 20:47:55 255

原创 回溯算法之组合求和

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合,candidates 中的数字可以无限制重复被选取,示例如下:数组 candidates 中不包含0,如果有0要考虑无限循环的情况;数组中不包含重复元素,若包含重复元素要考虑去重的问题。本题与组合问题的区别是不限定组合元素的数量,并且可以重复选取。回溯三部曲:(1)参数和返回值:返回值为void,参数根据后面代码确定。(2)返回条件:返

2022-02-09 20:04:33 927

原创 回溯算法之组合问题

给定两个整数 n 和 k,返回范围[1,n]中所有可能的 k 个数的组合,可以按任何顺序返回答案,示例如下:1.为什么使用回溯法本题可以使用for循环嵌套求解,但是如果k值较大时,循环的嵌套层数就会很多,而使用递归加回溯就可以达到for循环的效果,递归的每一层其实就是一个for循环。2.树形结构3.回溯三部曲(1)参数和返回值:返回值为void,参数在后序确定。(2)终止条件:当集合中的数目为2时,就保存结果并返回。(3)单层逻辑:就是单层递归的逻辑。4.实现代码

2022-02-09 12:07:12 957

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除