- 博客(22)
- 收藏
- 关注
原创 C++ 快速排序算法
快速排序是自上而下的排序,即先让上层基本有序,然后向下分解,该层基本有序,再分解。归并排序是自下而上的排序,即先将数组一直分解至单个元素,然后向上层合并排序。快速排序与归并排序都是采用的分治+递归的思想。
2023-07-24 17:17:45
178
原创 C++ 国旗问题&颜色分类 LeetCode 75题
给定一个数组nums,和一个数target,请把小于等于target的数放在数组的左边,大于target的数放在数组的右边。如果move_p < target small_p向后移动一位,然后交换small_p 和 move_p,再让move_p向后移动一位。数组左右各一个指针,分别代表小区域和大区域,通过move_p和target比较的情况,不停的让左右指针向中间移动。如果move_p > target 把big_p向前移动一位,然后交换big_p 和 move_p。
2023-07-23 16:21:08
313
原创 C++ 逆序数问题 剑指 Offer 51. 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。输入: [7,5,6,4]
2023-07-21 17:02:03
422
1
原创 C++ 小和问题
在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。所以小和为 1 * 4 + 3 * 2 + 4 * 1 + 2 * 1 = 16。1左边比1小的数 => 1右边有几个比1大的数(4个)1 * 4。3左边比3小的数 => 3右边有几个比3大的数(2个)3 * 2。4左边比4小的数 => 4右边有几个比4大的数(1个)4 * 1。2左边比2小的数 => 2右边有几个比2大的数(1个)2 * 1。所以小和为1+1+3+1+1+3+4+2=16。5左边比5小的数,1、3、4、2;
2023-07-20 16:39:00
288
1
原创 C++ 归并排序
写在前面:如果看着比较懵,可以在编译器里逐语句调试代码,一步一步看程序的执行过程,会比较好理解一点。总体的思想就是,先不停的二分数组元素,直到分成单个元素之后,return。对应图中元素就是 先把 3 1 4 二分成单个元素,然后开始合并排序。然后把7 6 2 二分成单个元素,然后合并排序。当左右两边都有序了,开始左右合并排序。归并排序思想 分治+递归。左边分完之后,开始合并数组。
2023-07-19 17:08:29
78
原创 C++ 递归求解数组中L~R范围内的最大值
在第三遍执行程序的时候,满足终止条件,return 1,开始出栈,对应上图出栈序号。n = 3,return 3 * recursion(2),对应上图入栈序号①。n = 2,return 2 * recursion(1),对应上图入栈序号②。我们把数组分成两半,递归去找左边和右边的最大值,最后比较得出范围内的最大值。首先递归需要有两个条件:1.基线条件(终止条件) 2.递归条件。这种思路不是解决此题的最优方法,但是是理解递归和分治思想的好例子。n = 1,return 1,对应上图入栈序号③。
2023-07-18 16:36:10
216
1
原创 C++ 求局部最小值
nums[mid] = 4, 先判断4是不是局部最小值,不是,那我们接着判断,它比右边的5要小,那说明在4的左边是递减的,并且2 > 1 说明4往左和2往右都是递减的,那么必然存在一个局部最小值。我们使用二分法的原因是,在求解的过程中,我们只用找一边一定存在局部最小值的,另一边可以舍弃。所谓局部最小值,就是指一个元素比它左右两边的元素都小,那么它就是局部最小值。或者边界情况 1,2,0 其中1和0都是局部最小值。比如: 2,1,3 其中 1就是局部最小值。比如说:2,1,4,5,6。
2023-07-17 11:09:51
306
1
原创 C++ 二分法 LeetCode34题 在排序数组中查找元素的第一个和最后一个位置
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。如果数组中不存在目标值 target,返回 [-1, -1]。
2023-07-14 22:53:38
185
1
原创 C++ 二分查找算法
我们将mid值和目标值target作比较,根据大小移动left值或right值。再去mid值,即数组中间位置元素,左右边界相加除以2并向下取整。如果target值存在于数组中,那一定是某一个mid值。二分查找又名折半查找,就是每次缩小“一半”的查找距离。首先设定左右边界,左边界为-1,右边界为n。ps:后续还有扩展的问题。
2023-07-13 15:26:34
214
1
原创 C++ 插入排序算法
在进行排序的过程中,我们是将所有元素分为了两个部分,有序部分和无序部分。第一轮,我们将第0个元素作为有序部分,剩下的元素为无序部分。第一轮,有序部分:3,无序部分 5,2,1,4,0。第二轮,我们将第1个元素并入到有序部分,进行排序。第三轮,将第2个元素并入有序部分,进行排序。5 > 2,交换 3,2,5。3 > 2,交换 2,3,5。第三轮,有序部分:3,5,2。第二轮,有序部分:3,5。无序部分:2,1,4,0。无序部分 1,4,0。
2023-07-12 15:26:47
171
1
原创 Leetcode力扣 136题 只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。这题也可以扩展为1)只有一个数出现了奇数次,其余数出现偶数次2)有两个数出现了奇数次,其余数出现偶数次解题方法:用到异或运算简述异或运算(二进制运算,相同为0,不同为1)0^0 = 01^0 = 10^1 = 11^1 = 0。
2023-07-11 17:26:20
145
原创 C++ 冒泡排序算法
第二轮,同样从第0个数出发,一直做比较交换操作,直到倒数第二个位置,因为最后一个数是最大的,所以不用比较。直到倒数第三个位置,因为最后两个数已经有序了,所以不用比较。一直重复 数组长度-1 轮,只剩一个数的时候,不用再比较了。第一轮结束时,就可以找到一个最大的数,并且放在了数组最后。两两比较,大数往后交换。
2023-07-10 15:25:23
97
1
原创 C++ 选择排序算法
假定数组下标 0 的位置作为最小值,记为min_num,依次和后续的数作比较,找到一个实际上的最小值下标。假定数组下标 1 的位置作为最小值,记为min_num,依次和后续的数作比较.。假定数组下标 2 的位置作为最小值,记为min_num,依次和后续的数作比较.。然后我们把 下标为0的位置的元素和上面找到的最小值的下标min_num 作交换操作。此时我们就已经找了该数组最小的元素了,并且把它放到了第0个位置。创建一个数组 {3,1,4,2,5,0}重复上述操作,直到遍历完整个数组元素。
2023-07-10 11:52:29
138
1
原创 《机器学习》周志华 西瓜书习题1.1解答
题目:1.1 表1.1中若只包含编号为1和4的两个样例,试给出相应的版本空间。表1.1编号色泽根蒂敲声好瓜1青绿蜷缩浊响是4乌黑稍蜷沉闷否首先得理解版本空间的概念:即存在一个与训练集一致的“假设集合”简单说就是我们要得到的这个版本空间是从所有的假设中删除和正例(色泽:青绿;根蒂:蜷缩;敲声:浊响)不一致的或与反例(色泽:乌黑;根蒂:稍蜷;敲声:沉闷)一致的假设然后用我最开始想到的最笨的方法,列出所有的假设正例(属性值定为1)反例(属性值
2021-11-14 13:10:21
3793
原创 冒泡排序
冒泡排序 (C++实现)#include<iostream>using namespace std;int main() { int arr[] = { 1,3,5,2,3,2,4,5,6,7,2,2 }; int i, j, temp; cout << "一共有" << sizeof(arr)/sizeof(arr[0]) << "个数" << endl; for (i = 0; i < sizeof(arr)/sizeo
2021-03-05 14:53:00
98
原创 几种操作符的用法
一、算术操作符加(+)、减(-)、乘(*)、除(/),取模(%)、幂运算(**)、地板除(//)1.除(/)两数相除时系统总会输出浮点数,不管输入整型还是浮点型>>>3/21.5>>>2/21.02.取模运算(%)两数相除取余数公式:被除数-[被除数/除数]*除数注意:最后结果与除数的符号相同>>>4%31>>>-7%21>>>7%(-2)-1>>>-7%(-2)
2020-09-05 20:10:15
248
原创 删除字符串中空白的函数
删除字符串前的空白xx.lstrip()函数删除字符串后的空白xx.rstrip()函数删除字符串两端的空白xx.strip()函数举例>>>name=" Python ">>>name.lstrip()>>>name.rstrip()>>>name.strip()输出'Python '' Python''Python'...
2020-09-05 17:14:12
1030
原创 制表符和换行符
制表符相当于在输出时添加一个tab键举例print("Python")print("\tPython")输出Python Python换行符举例print("I like Python\nC\njava")输出I like PythonCjava
2020-09-05 16:12:40
1733
原创 变量的命名和使用应注意的几点
变量的命名和使用需注意的地方1.变量名只能包含字母、数字和下划线(可以用字母或下划线开头,但不能 以数字开头)。2.变量名不能包含空格。3.不能将Python关键字和函数名用作变量。4.变量名应既简短又具有描述性。5.慎用小写字母l和大写字母O,可能会被看成数字1和0。...
2020-09-05 11:29:08
3393
原创 修改字符串的大小写用到的几个函数
一、首字母大写函数xx.title()将字符串改为首字母大写举例name="shen"print(name.title())输出为Shen二、全部大写函数xx.upper()将字符串改为全部大写举例name="shen"print(name.upper())输出SHEN三、全部小写函数xx.lower()将字符串改为全部小写举例name="SHen"print(name.lower())输出shen...
2020-09-05 11:27:18
671
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人