- 博客(12)
- 收藏
- 关注
原创 股票系列问题最简通解(非lc官方版本),详细注释,超好记
121. 买卖股票的最佳时机class Solution { public int maxProfit(int[] prices) { int[] dp = new int[2]; dp[0] = -prices[0]; dp[1] = 0; // 可以参考斐波那契问题的优化方式 // dp[0] 和 dp[1], 其实是第 0 天的数据 // 所以我们从 i=1 开始遍历数组,一共有 prices.length 天, // 所以是 i<=
2021-11-24 10:19:54 3690
原创 147. 对链表进行插入排序
题目147. 对链表进行插入排序数组版插入排序的代码受该插入排序代码启发,看题解时时刻对照该代码就很清晰啦for (int i = 1; i < nums.length; i++) { int temp = nums[i]; int j = i - 1; while (j > -1 && temp < nums[j]) { nums[j + 1] = nums[j]; j--; } nums[j + 1] = temp;}
2021-12-31 20:09:59 419
原创 剑指 Offer 11. 旋转数组的最小数字 我发现了另一个能收缩查找区间的条件,原来mid与左右端点都可比
剑指 Offer 11. 旋转数组的最小数字起因l 为左端点, r 为右端点我刚拿到这道题也懵了,排序数组得用二分查找来收缩查找区间啊,可是旋转之后咋用二分来收缩区间呢?于是广快去题解区拜读大佬们的文章,于是又又又又看到了笑脸路飞大佬的文章 ,写的那是相当不错啊,尤其是关于用mid与右端点做比较才能收缩区间的讲解。不过当numbers[r]==numbers[mid]时只能退化到线性查找让我觉得有点不甘心,在我仔细研究之后,我发现原来能用numbers[l] 和 numbers[r]来进一步
2021-12-28 18:08:06 255
原创 链表之我是笨蛋
申明本文解法只适用于可以使用额外空间的链表题目开篇词问题我先问你个问题,数组、链表到底有什么区别?不看存储方式,那么数组支持顺序访问、随机访问,而链表仅支持顺序访问因此让链表也支持随机访问就行了模板// 将节点保存到list中List<ListNode> list = new ArrayList<>();while(head != null){ list.add(head); head = head.next;}/* do something
2021-12-10 15:22:16 463
原创 3.无重复字符的最长子串(深度剖析解题代码)
3. 无重复字符的最长子串给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度
2021-12-05 10:01:42 382 2
原创 利用121.买卖股票的best时机对上一篇的思考进行补充说明
121. 买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5
2021-11-23 17:33:31 129 2
原创 对动态规划的一点总结和思考
这样来看dp数组dp[i] 的含义是由下标 i 和 dp[] 共同构成的,先明确 下标 i ,再明确 dp[i] ,做题过程中时刻不忘他们的含义比如 i 代表有 i 件物品,i 套上 dp[] 后就表示 i 件物品能获得的最大利润动态规划的-1优化一维的一样取nums+1长度,就赋值 nums[1] , 返回dp[nums.length], 取nums长度,就赋值 nums[0] ,返回dp[nums.length] -1正常来讲我们的 dp 数组,都是 nums+1 的长度,因为题目取不
2021-11-23 09:24:35 4059
原创 198 打家劫舍,不考虑dp[0]的解法
题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2,7,9
2021-11-22 19:31:47 69
原创 494.目标和,对题解代码的深入理解
dp[0] 赋值为 1 的写法1秒记住class Solution { public int findTargetSumWays(int[] nums, int target) { int sum=0; for(int i=0; i<nums.length; i++){ sum+=nums[i]; } // 如果nums={998},target=-999 // 显然凑不出来,所以得用t
2021-11-18 08:28:41 3950
原创 738.单调递增的数字,对解题代码的深度思考
前情提要根据 carl 哥思路的解题代码(我做了部分细节上的优化)class Solution { public int monotoneIncreasingDigits(int n) { // 将n转换成char数组方便操作每个位上的值大小 char[] num=Integer.toString(n).toCharArray(); // 需要变成9的位数 int start=num.length; // 全局最优:
2021-11-17 13:36:00 857
原创 我的vim学习笔记,记录了很多实用的操作
学习网站在linux上学 vimtutor zh还可以在这些地方学陈浩简明 VIM 练级攻略vim教程网高效编程:在IntelliJ IDEA中使用VIMfrankfuckppt b站自搜(淘宝付费教程)我在这学的,感觉还阔以,讲虚拟机的使用、linux和vimvisual(可视化模式)选中v:可以自由选中任意文本 可以按o改变光标在选中文本的位置,且已选中的文本不会失去选中状态V:只能选中行ctrl+v:很神奇的一种选中方式vaw:快速选中一个单词
2021-11-16 18:54:42 926
原创 先走一步啦(112路径总和),对解题代码的深入思考
先走一步啦(力扣112路径总和),对解题代码的深入思考思考的问题记一次对该解题代码的位置摆放和count==?的深入思考。// carl哥的回溯解题法,// 略微有些改动,其实就是把 // return traversal(root, targetSum-root.val);// 的targetSum-root.val,放在了外面,对我来说这更清晰些class Solution { public boolean hasPathSum(TreeNode root, int
2021-11-15 19:51:32 1695 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人