算法题
文章平均质量分 86
leetcode刷题笔记
hu_xiang_1995
这个作者很懒,什么都没留下…
展开
-
【刷题】3-way-partition
概述partition应该都很熟悉,是快排的核心,下面是是模板代码public int partition(int[] arr, int left, int right) { int oldLeft = left; // 记录左边界 int pivot = arr[left++]; while(left <= right) { if(arr[left] <= pivot) { ++left原创 2022-04-04 21:18:37 · 376 阅读 · 0 评论 -
【刷题】0-1背包/完全背包
概述0-1背包和完全背包区别在于元素是否可以重复被选取,常用来解决给定target在目标数组中求解某些组合或者排列使其权值和为target的问题,或者判断是否存在这样的组合,类似将物品放入固定容量背包中,恰好装满背包所得到的最大物品价值这样的经典题型。1. 0-1 背包思路:f[i][j]表示从前i件物品中,选择若干件物品,恰好放入容量为j的背包中,可以得到的最大价值(当然依据题意也可以是多少种组合数)这个恰好其实是状态设计的一个核心点,这就表示并不是所有的dp[i][j]都是有效的,确实有可能原创 2022-03-27 18:32:53 · 390 阅读 · 0 评论 -
【刷题】回溯的思考
概述回溯就是基于深度优先搜索进行遍历所有可能的组合,达到递归的边界或者其它限制条件就返回的搜索方式。自己刷了一些leetcode题将回溯总结为以下两种基本思路:DFS()代表实现回溯的递归深搜函数,int[ ] nums为目标数组每次调用DFS(int index)都是要确认是否选择nums[index]每次调用DFS( )都是在往某一条递归路径形成的集合中加入第n个数,n代表DFS( )调用栈的深度每种思路对递归出口的设置也会不同,直接说比较抽象,下面通过例题来解释例题例题1剑指 O原创 2022-03-24 17:21:23 · 420 阅读 · 2 评论 -
【刷题】leetcode53. 最大子数组和
题目leetcode 53. 最大子数组和给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23思路使用分治的思想解决官方题解:原创 2021-12-16 21:30:54 · 255 阅读 · 0 评论 -
【刷题】双指针---优化枚举
前言双指针常用于数组类型的题目需要枚举时进行的一种优化操作,类似于回溯过程中的"减枝"算法思路可以使用双指针的题目会有以下的特点:需要枚举数组间元素间的组合(常为两个元素)例题...原创 2021-11-29 14:51:58 · 563 阅读 · 0 评论 -
【刷题】leetcode98.验证二叉搜索树
分别使用前序,中序,后序的方法解决本问题方法1:前序遍历思路:判断本结点root.val是否满足要求判断左子树是否是BST判断右子树是否是BSTroot.val应该满足的要求是介于上界(upper)和下界(lower)之间,lower和upper可以从之前遍历过的结点之中获取相关信息,当root.val确认满足要求后递归到左右子树往左子树递归下界不变,上界变为root.val,因为BST对左子树所有结点(node)的要求就是node.val < root.val往右子树递归原创 2021-08-11 08:54:21 · 72 阅读 · 0 评论