leetcode刷题笔记
主要为力扣的刷题笔记
zero _s
这个作者很懒,什么都没留下…
展开
-
字符串操作相关题目
public class ReverseWorlds{ String s = " i am a student"; // 借助数组拆分然后反向遍历 String[] str2arr = s.split(" "); System.out.println(Arrays.toString(str2arr)); int n = str2arr.length; for(int i =n-1;i>=0;--i){ if(str2arr[i].equa.原创 2021-09-21 22:09:25 · 229 阅读 · 0 评论 -
堆栈相关题目
class MyQueue { // 队列是先进先出,栈是先进后出,所以用两个栈来实现一个队列 private Stack<Integer> in; private Stack<Integer> out; /** Initialize your data structure here. */ public MyQueue() { // 初始化 in = new Stack(); out = new S...原创 2021-09-14 19:25:11 · 198 阅读 · 0 评论 -
二叉树的前序后续中序遍历
递归实现:class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); preOrder(root,res); return res; } private void preOrder(TreeNode node,List&...原创 2021-09-11 21:54:18 · 106 阅读 · 0 评论 -
二叉树相关题目
二叉树树一般都是利用递归去求解bclass Solution { public int maxDepth(TreeNode root) { // 利用dfs递归调用 // return root==null ?0 : Math.max(maxDepth(root.left),maxDepth(root.right))+1; // 方法2 广度优先遍历 bfs ,并利用队列按层去弹出和加入每层的叶子节点 if(root ...原创 2021-09-09 20:02:30 · 92 阅读 · 0 评论 -
链表类型的题目
public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { /** 考虑构建两个节点指针 A , B 分别指向两链表头节点 headA , headB ,做如下操作: 指针 A 先遍历完链表 headA ,再开始遍历链表 headB ,当走到 node 时,共走步数为:a + (b - c) 指针 B ...原创 2021-09-06 22:42:34 · 453 阅读 · 2 评论 -
股票问题分析
class Solution { public int maxProfit(int[] prices) { /** 动态规划求解 */ if(prices == null || prices.length ==0) return 0; int n = prices.length ; int[][] dp = new int[n][3]; /** 认清以...原创 2021-09-01 19:14:27 · 157 阅读 · 0 评论 -
0-1背包问题
class Solution { public int coinChange(int[] coins, int amount) { /** 因为硬币是可以重复使用的,所以是一个完全背包问题,完全背包问题只需要将0-1背包的逆序遍历dp数组改成正序遍历即可 */ if(amount ==0) return 0; int[] dp = new int[amount+1]; ...原创 2021-08-30 20:10:46 · 136 阅读 · 0 评论 -
动态规划类题目分类
动态规划 : 把大问题拆分成很多子问题,甚至子问题的子问题来求解,这些子问题并非全部相互独立,而是把所有子问题的求解都算作一次计算,最后把这些子问题的解输出来得到原始的解。每个子问题就好比数学上的三角函数的一个周期内的图像描述,每个子问题是有共通性的,如果把一个子问题可能的细节全部考虑到,其他周期都是在重复这个周期内的所有细节描述,仅仅是换了一个递推的参数而已,那么这个动态规划问题的通项小问题模板就找到了。...原创 2021-08-29 22:48:41 · 309 阅读 · 0 评论 -
回溯算法分类
回溯算法也是属于dfs深度优先遍历算法,普通的dfs算法只是用于可达性问题,这种问题只是需要执行到特定的位置然后返回就可以;而回溯算法主要用于求解排列组合问题,例如有{a,b,c},求解它的全排列问题,这种问题再执行到特定的位置返回之后,还会继续执行求解过程。因为回溯算法不是立刻返回,而是继续求解,因此再程序实现的时候,需要注意对元素的标记问题:1、再访问一个新元素进行新的递归调用的时候,需要将新元素标记为已经访问,这一才能再继续递归调用的时候,不用重复访问该元素;2、再递归返...原创 2021-08-24 20:36:09 · 303 阅读 · 1 评论 -
bfs --广度优先遍历/深度优先遍历
在程序考虑bfs算法的时候,需要考虑两个问题:1、标记: 对于遍历过的节点,应该将它标记,防止重复遍历2、需要一个队列来存储每一轮遍历得到的节点深度优先遍历:class Solution { private int[][] directions = {{-1,0},{0,1},{1,0},{0,-1}} ; // 定义方向数组,分别表示上右下左 横向第一个参数是0,纵向第二个参数是0 private int row,col; //定义总的行...原创 2021-08-21 20:19:14 · 243 阅读 · 0 评论 -
分治思想的题目
分治思想: 将原问题分割为比原问题更小的子问题class Solution { public List<Integer> diffWaysToCompute(String expression) { // 为返回结果集开辟空间 List<Integer> res = new ArrayList<>(); int len = expression.length(); for(int .原创 2021-08-21 20:10:22 · 92 阅读 · 0 评论 -
二分法查找法
public class Solution extends VersionControl { public int firstBadVersion(int n) { // 采用二分法 找到第一个true int l = 1,r = n; // 因为r向左折半的时候是直接用m,所以等号要去掉 while(l<r){ int m = (l+r)/2; if(isBadVersion(m)==true){ ...原创 2021-08-20 10:53:47 · 79 阅读 · 0 评论 -
贪心算法、二分查找
53. 最大子序和给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组[4,-1,2,1] 的和最大,为6 。class Solution { public int maxSubArray(int[] nums) { /* 首先需要找到起点 需要遍历整个数组,找到所有可能连加和大...原创 2021-08-19 20:35:57 · 586 阅读 · 0 评论 -
力扣---排序题目-- 贪心算法
贪心算法:是在求解的时候不考虑整体是否为最优解,只考虑当前情况,让当前为最优的解。406. 根据身高重建队列 假设有打乱顺序的一群人站成一个队列,数组people表示队列中一些人的属性(不一定按顺序)。每个people[i] = [hi, ki]表示第i个人的身高为hi,前面正好有ki个身高大于或等于hi的人。请你重新构造并返回输入数组people所表示的队列。返回的队列应该格式化为数组queue,其中queue[j] = [hj, kj]...原创 2021-08-19 15:35:47 · 566 阅读 · 0 评论 -
力扣刷题-----基础篇--二分查找
1、二分查找class Solution { public int[] searchRange(int[] nums, int target) { // 利用两个二分查找,第一个找左边界,第二个找右边界 int[] res = new int[2]; if (nums.length == 0)return new int[]{-1,-1}; res[0] = bs1(nums,target); res[1.原创 2021-08-11 19:27:30 · 151 阅读 · 0 评论