自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AAS48的博客

算法之路

  • 博客(322)
  • 收藏
  • 关注

原创 数据结构中常用排序算法总结

常用排序算法总结本文包括:选择排序、简单插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、归并排序、基数排序一、选择排序选择排序是最简单的一种排序算法,它的思想很简单,即:第一趟遍历整个无序的序列,然后将最小的放首位;第二趟继续遍历后面无序的序列,将第二小的放在第二位…故而时间复杂度是O(n^2)所以代码直接模拟即可//简单选择void select_sort(){ for(int i = 0;i < n;i++){ int min = arr[i], min_index =

2020-10-29 12:05:38 318

原创 递归练习题:求解n阶螺旋矩阵问题(经典)

【问题描述】创建n阶螺旋矩阵并输出。输入样例:4输出:1 2 3 412 13 14 511 16 15 610 9 8 7【思路】:二月份的最后一天了,今天一定要多刷点题。好,言归正传。本题其实没那么简单,首先,你得看明白题,它要求的是创建n阶螺旋矩阵并输出,而不是我一开始想的直接用递归函数输出。也就是说,我们是先用递归函数将螺旋矩阵放入到一个二维数组中去之后再输出 !如果像......

2019-02-28 14:02:50 11007 4

原创 pyinstaller入门小例子

综合起来,build 文件夹包含了打包过程中的临时文件,dist 文件夹包含了最终生成的可执行文件,而 hello.py 是你要打包的原始 Python 脚本文件。hello.spec: 当你运行 PyInstaller 打包命令时(例如 pyinstaller hello.py),PyInstaller 会生成一个 .spec 文件,其中包含了有关打包过程的配置信息。hello.py: 这是你要打包的 Python 脚本文件,其中的 “hello” 是你的脚本的文件名。2、编写我们的python程序。

2023-08-30 18:44:02 174

原创 python查看本地arp表和默认网关

【代码】python查看本地arp表和默认网关。

2023-08-23 14:38:06 313

原创 Nginx形象解释,它到底有什么用?

当你在家中举办一个派对时,Nginx就像是一个出色的主持人。它负责处理来自不同客人的请求,并将它们引导到适当的地方,以确保派对的顺利进行。想象一下,你的客人们都有不同的需求。有些人想要享用美味的食物,有些人想要畅快地跳舞,还有些人想要在舒适的沙发上聊天。作为主持人,你需要根据每个客人的需求,将他们引导到正确的地方。这就是Nginx的作用。它是一个高性能的Web服务器和反向代理服务器,可以处理并分发来自不同客户端的请求。它可以根据请求的URL、域名或其他条件,将请求转发到正确的后端服务器上。

2023-08-22 16:13:12 137

原创 springboot+docker实现微服务的小例子

本文使用 docker技术,实现了一个非常简单的微服务架构demo。

2023-08-21 16:15:57 860

原创 MAC系统配置 JAVA_HOME 环境变量,然后安装maven

输入mvn -v查看maven版本,如果没有问题,则安装成功。安装jdk之后,要配置JAVA_HOME 环境变量。请确保将路径替换为您在第三步中找到的实际路径。终端将显示您的 Java 安装路径,类似于。运行brew install maven。

2023-08-21 15:03:49 805

原创 Docker入门使用

举个例子,编写好的项目proj要编写dockerfile来定义如何打包镜像,最后运行docker build命令来完成打包,生成proj对应的镜像image。接下来,创建一个 Dockerfile ,指定如何在 Docker 镜像中构建和运行 Python + Flask 应用程序。因此,只要使用一样的镜像image,最后任何人都可以成功在docker上部署项目来复现代码效果,不用因为环境依赖冲突而烦恼。构建好的镜像存在本地docker仓库中,可以用命令 docker images来查看。

2023-08-14 14:47:49 347

原创 Leet code1049 最后一块石头的重量II

我们可以将石头分成两堆,假设为堆 A 和堆 B。我们的目标是使得两堆石头的重量差最小。,我们有两种选择:选取它或者不选取它。个石头中选取一些石头,使得它们的总重量恰好为。个石头中选取一些石头,使得它们的总重量恰好为。个石头中选取一些石头,使得它们的总重量恰好为。个石头中选取一些石头,使得它们的总重量恰好为。假设石头的重量分别为。而这个也正是最后无法合并,剩下的石子重量。的前提下,尽可能地选取石头放入堆 A。1049 最后一块石头的重量II。最后,A堆的石子重量为:j。最后一块石头的重量为。

2023-08-13 15:09:58 218

原创 Leet code 面试题 04.12. 求和路径(深搜)

给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。对于一个根结点为root的树,其满足要求的路径数量 = 包含root节点的路径数 + 左子树满足要求的路径 + 右子树满足要求的路径。解释:和为 22 的路径有:[5,4,11,2], [5,8,4,5], [4,11,7]一个递归里面套着另一个递归。

2023-08-11 17:10:29 146

原创 Leetcode 678. 有效的括号字符串

由于子串的长度为 len,所以起始位置的最大值为 n - len,以确保子串不会超出字符串的边界。我们可以定义一个二维数组 dp,其中 dp[i][j] 表示从字符串的第 i 个字符到第 j 个字符(闭区间)是否为有效字符串。1、当 s[i] 和 s[j] 分别为 ‘(’ 和 ‘)’ 时,dp[i][j] 可以为有效字符串的条件是 dp[i+1][j-1] 为有效字符串。内部存在一个分割点k,使得 dp[i][k] && dp[k+1][j] 同时为有效的括号字符串。输入:s = “(*))”

2023-08-11 14:00:13 275

原创 Leetcode 583 两个字符串的删除操作(经典)

这个问题可以使用动态规划来解决。我们可以构建一个二维数组 dp,其中 dp[i][j] 表示将 word1 的前 i 个字符变成 word2 的前 j 个字符所需的最小步数。最终,dp[word1.length()][word2.length()] 就是将整个 word1 变成 word2 所需的最小步数。给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。每步 可以删除任意一个字符串中的一个字符。

2023-08-11 11:43:20 287

原创 xgboost机器学习算法通俗理解

通过这个例子,你可以更深入地理解 XGBoost 的原理:通过迭代训练多个决策树,每个决策树都试图纠正前面决策树的错误,最终将它们集成在一起,以获得更准确的预测结果。就像你在制作咖啡时,通过多次尝试和调整,最终得到了最好口味的咖啡一样,XGBoost 通过集成多个决策树的预测结果,得出了更准确的预测。通过这个例子,你可以理解 XGBoost 模型的原理:通过迭代训练多个决策树,每个决策树都试图纠正之前决策树的错误,最终将它们组合起来,以获得更准确的预测结果。:你的朋友会根据问题的回答,告诉你是否猜对了。

2023-08-11 10:51:51 171

原创 Redis小例子

下面给一个Java操作redis的小例子。

2023-08-10 17:25:17 344

原创 Leetcode 784. 字母大小写全排列(回溯)

给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。返回 所有可能得到的字符串集合。以 任意顺序 返回输出。数据量不大,可以直接暴力回溯。

2022-10-30 11:36:19 115 1

原创 2249. 统计圆内格点数目(技巧)

给你一个二维整数数组 circles ,其中 circles[i] = [xi, yi, ri] 表示网格上圆心为 (xi, yi) 且半径为 ri 的第 i 个圆,返回出现在 至少一个 圆内的 格点数目。利用公式:(x-a)²+(y-b)²

2022-10-19 15:12:56 491

原创 Leetcode 696. 计数二进制子串(技巧)

链接:https://leetcode.cn/problems/count-binary-substrings/solution/ji-shu-er-jin-zhi-zi-chuan-by-leetcode-solution/给定一个字符串 s,统计并返回具有相同数量 0 和 1 的非空(连续)子字符串的数量,并且这些子字符串中的所有 0 和所有 1 都是成组连续的。我们只要遍历所有相邻的数对,求它们的贡献总和,即可得到答案。重复出现(不同位置)的子串也要统计它们出现的次数。来源:力扣(LeetCode)

2022-10-15 11:54:11 197

原创 Leetcode 1217. 玩筹码(脑筋急转弯)

其实每次cost的值就是奇数位置的筹码移动到偶数位置和偶数位置的筹码移动到奇数位置的最小值。我们需要把所有筹码移到同一个位置。position[i] + 2 或 position[i] - 2 ,此时 cost = 0。position[i] + 1 或 position[i] - 1 ,此时 cost = 1。第 i 个筹码的位置是 position[i]。返回将所有筹码移动到同一位置上所需要的 最小代价。

2022-10-09 16:59:29 122

原创 892. 三维形体的表面积(技巧)

至于下边和右边的面积,由后面的柱体来减。首先,一个柱体一个柱体的看,每个柱体是由:2 个底面(上表面/下表面)+ 所有的正方体都贡献了 4 个侧表面积。输入:grid = [[1,1,1],[1,0,1],[1,1,1]]输入:grid = [[1,2],[3,4]]

2022-10-08 11:38:31 126

原创 LCP 18. 早餐组合(dp背包思想优化)

小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格。小扣的计划选择一份主食和一款饮料,且花费不超过 x 元。请返回小扣共有多少种购买方案。注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1。本题用暴力会超时,因为数据量是10的5次方。暴力是N^2的复杂度。如果这样的话,就可以省去一层循环了。因此我们需要一个O(n)的算法。

2022-10-07 14:19:49 79

原创 976. 三角形的最大周长(巧妙的贪心+排序)

如果 A[i-2] + A[i-1] A[i]了 (j

2022-10-07 13:49:16 149

原创 Leetcode 最多删除一个字符得到回文(双指针,思路棒)

每次判断两个指针指向的字符是否相同,如果相同,则更新指针,将 low + 1,high - 1,然后判断更新后的指针范围内的子串是否是回文字符串。如果两个指针指向的字符不同,则两个字符中必须有一个被删除,此时我们就分成两种情况:即删除左指针对应的字符,留下子串 s[low+1:high],或者删除右指针对应的字符,留下子串 s[low:high−1]。定义左右指针,初始时分别指向字符串的第一个字符和最后一个字符,每次判断左右指针指向的字符是否相同,如果不相同,则不是回文串;) 的,会超出时间限制。

2022-10-04 20:01:03 218

原创 Leetcode 1640. 能否连接形成数组

给你一个整数数组 arr ,数组中的每个整数 互不相同。另有一个由整数数组构成的数组 pieces,其中的整数也 互不相同。请你以 任意顺序 连接 pieces 中的数组以形成 arr。但是,不允许 对每个数组 pieces[i] 中的整数重新排序。如果可以连接 pieces 中的数组形成 arr ,返回 true;否则,返回 false。记录每一个pieces中首元素的下标。

2022-10-04 18:45:14 124

原创 剑指 Offer II 024. 反转链表(原地修改)

在遍历链表时,将当前节点的指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。本题要设计一个时间复杂度O(n), 空间复杂度O(1)的算法来反转链表。输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]

2022-10-03 14:46:07 206

原创 剑指 Offer II 002. 二进制加法(模拟)

给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。这个函数可以记下来,以后用到可以直接copy。输入为 非空 字符串且只包含数字 1 和 0。

2022-09-28 14:25:07 133

原创 Leetcode 6189. 按位与最大的最长子数组(DP)

换句话说,令 k 是 nums 任意 子数组执行按位与运算所能得到的最大值。那么,只需要考虑那些执行一次按位与运算后等于 k 的子数组。考虑 nums 中进行 按位与(bitwise AND)运算得到的值 最大 的 非空 子数组。第i位的按位与最大值,要么是在前一位的基础上与运算,要么是自己本身。数组的按位与就是对数组中的所有数字进行按位与运算。给你一个长度为 n 的整数数组 nums。借助了动态规划:最长递增子数组的思想。返回满足要求的 最长 子数组的长度。子数组 是数组中的一个连续元素序列。

2022-09-25 12:32:20 182

原创 Leetcode 788. 旋转数字

如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方(在这种情况下,它们以不同的方向旋转,换句话说,2 和 5 互为镜像);6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。现在我们有一个正整数 N, 计算从 1 到 N 中有多少个数 X 是好数?

2022-09-25 12:22:45 88

原创 1740. 找到二叉树中的距离(DFS)

给定一棵二叉树的根节点 root 以及两个整数 p 和 q ,返回该二叉树中值为 p 的结点与值为 q 的结点间的 距离。也可以借助前面实现的求最近公共祖先的方法。如果能求出祖先,再直接去求两边的距离也可以。两个结点间的 距离 就是从一个结点到另一个结点的路径上边的数目。1、遍历每一个节点,看其能否到达p,q两个目标节点。如果都可以到达的情况下,保存一个距离的最小值。

2022-09-23 09:52:51 193

原创 6182. 反转二叉树的奇数层(层次遍历)

例如,假设第 3 层的节点值是 [2,1,3,4,7,11,29,18] ,那么反转后它应该变成 [18,29,11,7,4,3,1,2]。用层次遍历,拿到每一层的序列。然后把奇数层用链表串起来,将问题转化为逆置链表即可。可以直接在树上进行修改。给你一棵 完美 二叉树的根节点 root ,请你反转这棵树中每个 奇数 层的节点值。完美 二叉树需满足:二叉树的所有父节点都有两个子节点,且所有叶子节点都在同一层。节点的 层数 等于该节点到根节点之间的边数。反转后,返回树的根节点。

2022-09-18 12:01:46 259

原创 Leetcode 340. 至多包含 K 个不同字符的最长子串(滑动窗口)

给你一个字符串 s 和一个整数 k ,请你找出 至多 包含 k 个 不同 字符的最长子串,并返回该子串的长度。注意时间复杂度的控制,如果无脑O(n^2)会超时。我这里用hash优化到了O(n)

2022-09-18 11:59:53 216

原创 Leetcode 删除有序数组中的重复项(I, II两题)

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。将最终结果插入 nums 的前 k 个位置后返回 k。

2022-09-17 16:22:54 118

原创 416. 分割等和子集(dp01背包,深刻理解动态规划)

给你一个 只包含正整数 的 非空 数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。因此,我们定义dp[i][val] 表示前i个物品,能否凑出重量为val的这种方案。如果dp[i][val] = 1表示可以凑出,等于0表示不能凑出。因为要求是分成两个等和子集,所以其实我们可以理解为,本题思路非常巧妙,将其转成01背包的动态规划。经过本题之后,确实感觉对动态规划更有感觉了。状态转移:基本上和01背包一样的思想。

2022-09-17 15:32:03 137

原创 Leetcode 253. 会议室 II(上下车问题)

给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,返回 所需会议室的最小数量。这样可以把上车和下车的时间分成两组,通过两个指针滑动的方式,判断同时在车上的最大数就可以了。不用在意是谁上车还是下车,只需要注意什么时候上下车就可以。【思路】:本题思路非常好,称为。

2022-09-17 14:29:16 441

原创 250. 统计同值子树(二叉树)

遍历每个节点,看每个节点形成的树是否都是同值的。如果是,就res++即可。给定一个二叉树,统计该二叉树数值相同的子树个数。同值子树是指该子树的所有节点都拥有相同的数值。

2022-09-17 13:06:33 518

原创 面试题 17.10. 主要元素(摩尔投票)

数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。大致思想是如果有不同的就相互抵消,最后剩下来的那个x是可能的值。这个算法在求主要元素,或占比比较大的元素时具有很好的效果。所以最后还得检验一遍。

2022-09-17 12:45:05 82

原创 面试题 17.09. 第 k 个数(技巧)

链接:https://leetcode.cn/problems/get-kth-magic-number-lcci/solution/di-k-ge-shu-jiu-shi-xiang-bu-tong-wei-he-san-zhi-z/例如,前几个数按顺序应该是 1,3,5,7,9,15,21。定义三个index 分别指向上面三个数列,下一个丑数一定是三个 index 代表的值中最小的那个。反过来说也是一样的,一个丑数 x3 / x5 / x7 就会得到某一个更大的丑数。来源:力扣(LeetCode)

2022-09-17 12:10:46 213

原创 剑指 Offer 16. 数值的整数次方(思路妙)

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。

2022-09-16 13:49:53 88

原创 剑指 Offer 04. 二维数组中的查找(二分技巧)

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。如果目标比右上角元素大,则往下搜。如果目标比右上角元素小,则往左搜。可以用递归也可以用循环实现。此题用暴力做效率很低,虽然也发现了矩阵有序的特点,但不知如何更好的使用二分查找。所以我突然反应出来,原来右上角是一个比较的起始位置。

2022-09-16 13:39:01 100

原创 1343. 大小为 K 且平均值大于等于阈值的子数组数目(滑动窗口模板题)

请你返回长度为 k 且平均值大于等于 threshold 的子数组数目。给你一个整数数组 arr 和两个整数 k 和 threshold。

2022-09-16 12:10:02 66

原创 剑指 Offer II 085. 生成匹配的括号 (暴力回溯)

正整数 n 代表生成括号的对数,请设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。每个位置只有两种选择,放左括号或右括号。最后筛选掉不合格的括号组合。

2022-09-14 16:25:11 97

空空如也

空空如也

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

TA关注的人

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