自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法学习|贪心03

给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。以这种方式修改数组后,返回数组可能的最大和。示例 1:输入:A = [4,2,3], K = 1输出:5解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。示例 2:输入:A = [3,-1,0,2], K = 3输出:6解释:选择索引 (1, 2, 2) ,然后 A 变为 [3,1,0,2]。

2023-08-31 00:29:01 73

原创 贪心算法 part02

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。

2023-07-31 22:40:55 76

原创 贪心算法 part01

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]

2023-07-27 17:13:16 89

原创 Day28 算法学习|回溯算法04

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效的 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效的 IP 地址。示例 1:输入:s = “25525511135”

2023-07-16 22:11:31 85

原创 Day29 算法学习|回溯算法05

给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]说明:给定数组的长度不会超过15。数组中的整数范围是 [-100,100]。给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。

2023-07-16 15:24:40 60

原创 Day26 算法学习|回溯算法03

39. 组合总和在一个整数数组candidates中找到所有可能的目标和为target的组合。同一个数字可以无限制重复被选取。candidatestarget(int) 输出结果:List[List[int]]candidates是一组整数列表,target是一个整数目标值。返回所有可能的candidates中的数相加等于target的组合。

2023-07-13 16:39:48 59

原创 Day25算法学习|回溯算法 组合

找出所有相加之和为n的k个数的组合。组合中只允许含有1-9的正整数,并且每种组合中不存在重复的数字说明:所有数字都是正整数。解集不能包含重复的组合。

2023-07-10 23:15:01 65

原创 Day24 算法学习|回溯算法01 组合问题

回溯算法在解决问题时,通常从根节点开始,先选择一条路线(选择一种解决方案)深入到底,也就是说,它优先搜索树或图的深度。当搜索到某一节点时,如果判断这个节点无法达到目标(满足结束条件),就会放弃对这条路线的深入,回溯到上一层,尝试其他可能的路径。回溯算法会逐个试遍所有可能的解决方案,直到找出所有满足条件的解,或者搜索完整棵树(所有可能的路径)。为了提高效率,回溯算法在实际操作中,会加入一些剪枝操作,比如某些情况下,如果早点发现这条路径不可能是正确解,就可以提前结束这次搜索,避免无效的遍历。

2023-07-01 20:23:46 80

原创 Day23 算法学习|二叉树08二叉树完结

给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L)。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。

2023-06-30 20:05:06 31

原创 Day21 算法学习|二叉树07 继续递归,难度提升

给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值。

2023-06-21 01:24:24 38

原创 Day20 算法学习|二叉树06 继续递归

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。

2023-06-15 00:51:15 33

原创 Day18 算法学习|二叉树05 继续递归/遍历构建二叉树

给定一个二叉树,在树的最后一行找到最左边的值。

2023-06-13 22:06:03 31

原创 Day17 算法学习|二叉树04 继续递归

给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

2023-06-07 22:28:00 26

原创 Day16 算法学习|二叉树03 最大与最小深度/节点个数

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例: 给定二叉树 [3,9,20,null,null,15,7],

2023-06-07 15:49:01 539

原创 Day15 算法学习|二叉树 层序遍历/翻转/对称

102.二叉树的层序遍历107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧节点指针117.填充每个节点的下一个右侧节点指针II104.二叉树的最大深度111.二叉树的最小深度。

2023-06-05 00:05:12 73

原创 Day09 算法学习| 栈与队列 deque和小顶堆

如果待添加的元素值大于队尾的元素,那么就将队尾的元素弹出,直到待添加的元素值小于等于队尾元素的值为止,然后再将新元素添加到队列尾部。这个函数用一个滑动窗口来遍历给定的数组,对于滑动窗口中的每一个位置,都将窗口中的元素添加到队列中,并将窗口最左侧的元素从队列中移除(如果它还在队列中的话),然后将队列的队首元素(即窗口中的最大值)添加到结果列表中。方法中存在一个看似是循环的操作(即当待添加的元素值大于队尾的元素,就将队尾的元素弹出),但由于每个元素只会被添加和移除一次,因此这个操作的总体复杂度也是 O(n)。

2023-06-02 21:28:44 132

原创 DAY 11 | 栈与队列02

时间复杂度:我们需要遍历一次输入的 tokens 数组,对于 tokens 中的每个元素,我们执行的操作(即比较和可能的压栈或出栈操作)都可以在常数时间内完成。在最坏的情况下(例如,当 tokens 中所有的元素都是数字时),我们需要把 tokens 中的所有元素都压入栈中。因此,为了保持栈中元素的一致性(即都是字符串类型的整数),以及为了符合题目要求(即所有的除法运算结果都需要取整),这里用。给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

2023-05-29 16:22:31 98 1

原创 Day 14 算法学习 | 二叉树的递归遍历

在最好的情况下(当二叉树完全平衡时),递归的深度为 log(n),此时空间复杂度为 O(log(n))。而在递归的过程中,我们看待整棵子树(包括根节点和其所有的子节点)作为一个待处理的单元,但这个单元(整棵子树)本身并不会被加入到结果列表。在最坏的情况下,列表的连接操作可能需要线性的时间,但在这种情况下,我们可以认为每个节点对应的操作时间是常数的,因此总的时间复杂度为 O(n)。这两个递归调用,是用来获取当前节点的左子树和右子树的前序遍历结果的,这两个递归调用返回的是一个节点值的列表,而不是整棵子树。

2023-05-28 21:24:55 46

原创 Day09 算法学习| 队列和栈互相实现

232.用栈实现队列。

2023-05-20 16:03:41 102

原创 Day08 算法| 字符串01

时间复杂度为 O(n),空间复杂度为 O(n),其中 n 是输入字符串的长度。这个函数使用双指针法,从字符列表的两端同时向中间移动,交换字符的位置,从而实现字符反转的操作。时间复杂度为 O(n + m * k),其中 n 是字符串的长度,m 是单词的数量,k 是单词的平均长度。空间复杂度为 O(n + m * k),其中 n 是字符串的长度,m 是单词的数量,k 是单词的平均长度。输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]

2023-05-20 15:22:57 44 1

原创 Day07 算法学习| 哈希表02

454.四数相加II。

2023-05-18 09:58:58 45

原创 Day 06 算法学习|哈希表01

在每次迭代中,我们都计算n的各位数字的平方和,并检查这个结果是否为1(表示n是一个快乐数)或者这个结果是否已经在我们的哈希集合中(表示我们已经进入了一个循环)。在python中,ord('a')表示字母a的ascall码值,如果一个词组为“dog”,我们要找各个单词的频次的时候,利用。回到本题,我们要判断两个词组是否相等,就不用分别创建两个hash表来比较了,在得到第一个词组的hash表的时候,将第二个词组直接在上面操作,不过区别在于对应频次减1,如果最后hash表全为0,那么这两个词组就是异位词。

2023-05-17 12:20:45 168 1

原创 DAY04算法学习|链表part02 24. 两两交换链表中的节点 , 19.删除链表的倒数第N个节点 , 面试题 02.07. 链表相交 , 142.环形链表II

时间复杂度:O(n+m),我们需要遍历两个链表计算长度,再遍历链表找到相交的起始节点,所以时间复杂度是 O(n+m),n 和 m 分别是两个链表的长度。时间复杂度:O(n),我们需要遍历所有的节点,进行交换,所以时间复杂度是 O(n),n 是链表的长度。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。如果链表B的长度大于链表A,我们就需要移动链表B的预头节点。时间复杂度:O(n),我们最多遍历链表两次,所以时间复杂度是 O(n),n 是链表的长度。

2023-05-17 00:41:28 39

原创 DAY03算法学习|链表理论基础 203.移除链表元素 ,707.设计链表 , 206.反转链表

在这个问题中,我们只需要遍历链表一次,对于每个节点,我们只做常数级别的操作(比如比较和修改指针),所以时间复杂度是O(n),其中n是链表的长度。在这个问题中,我们只使用了固定数量的额外空间(比如dummy_head和cur),不管链表的长度是多少,所以空间复杂度是O(1)。a-->b-->c, 要删除b节点不能直接用数组里面的remove,链表涉及到一个指向的问题,将a节点直接指向c就行了,给定链表头和整数 val,删除链表中所有具有 Node.val == val 的节点,并返回新头。

2023-05-15 20:22:43 46 1

原创 DAY02算法学习| 977.有序数组的平方 , 209.长度最小的子数组, 59.螺旋矩阵II

题目描述:给定一个按非递减顺序排序的整数数组 nums,返回一个按非递减顺序排序的每个数字的平方数组。

2023-05-15 15:26:15 60

原创 DAY01算法学习| 704. 二分查找、27. 移除元素。

题目描述:给定一个按升序排列的整数数组 nums 和一个整数目标,编写一个函数来搜索 nums 中的目标。如果目标存在,则返回其索引。否则,返回-1。example:解题思路:在给的例子中可以看出来本题的数组是有序,且不重复的,这时候就可以利用二分查找来解题。定义一个left指针, 一个right指针,通过比较nums【middle】与所给target值的大小关系来滑动left,right指针。

2023-05-12 09:23:21 43 1

空空如也

空空如也

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

TA关注的人

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