自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指 Offer 57. 和为s的两个数字

剑指 Offer 57. 和为s的两个数字难度:简单题目描述解题思路因为有前提条件是数组递增有序,所以可以采用双指针的方式,时间复杂度O(n),空间复杂度O(1)/* * 剑指 Offer 57. 和为s的两个数字 * 2020/6/30 */ public int[] twoSum(int[] nums, int target) { int i = 0,j = nums.length-1; while(i < j) { int sum = num

2020-06-30 12:44:10 97

原创 剑指 Offer 06. 从尾到头打印链表

剑指 Offer 06. 从尾到头打印链表难度:简单题目描述解题思路1、用栈辅助/* * 剑指 Offer 06. 从尾到头打印链表 * 2020/6/30 */ public int[] reversePrint(ListNode head) { Stack<Integer> stack = new Stack<>(); ListNode p = head; while(p !

2020-06-30 12:29:32 351

原创 剑指 Offer 09. 用两个栈实现队列

剑指 Offer 09. 用两个栈实现队列难度:简单招银网络科技的电话面试,好多人都被问到了这道题,正有想做一做的想法,力扣就出了每日一题!是快乐的感觉题目描述解题思路栈的特点是后进先出,队列的特点是先进先出,用两个栈,一个栈用来保存入栈元素,另一个栈用来颠倒出栈顺序~/* * 剑指 Offer 09. 用两个栈实现队列 * 2020/6/30每日一题打卡 */ class CQueue { Stack<Integer> stack_in;

2020-06-30 12:10:52 129

原创 414. 第三大的数

414. 第三大的数难度:简单题目描述本来这道题不难,但是测试用例好坑,面向测试用例编程了好久解题思路类似于大根堆的思想,维护一个长度为3的数组,数组里元素按照从大到小的顺序排序。初始是int型最小值,每添加一个元素,维护数组里的元素大小顺序。要注意的细节(巨坑)有:重复的元素不能计算,如果不足三个值要返回最大值。这里的三个值不是数组的长度,是不重复出现的数字,比如111112,就只能算1和2,应该返回2.还有测试用例[-2147483648,-2147483648,-2147483648

2020-06-29 15:26:24 415

原创 703. 数据流中的第K大元素 优先队列实现

703. 数据流中的第K大元素难度:简单题目描述解题思路这个跟TOP K问题差不多嘛,因为强调了是数据流中的元素,所以实时维护一个大小为k的小根堆比较合适。还是用优先队列来实现小根堆,要考虑num数组是空的情况,为了避免后面堆为空,加入一个最小元素import java.util.PriorityQueue;public class KthLargest { PriorityQueue<Integer> minHead; int k; public KthLargest(i

2020-06-29 11:35:05 151

原创 215. 数组中的第K个最大元素 快排思想+小根堆

215. 数组中的第K个最大元素难度:中等题目描述解题思路1、排序最简单最偷懒的当然是先排序,然后返回第n-k个元素,轻轻松松通过题数+1public int findKthLargest(int[] nums, int k) { Arrays.sort(nums); int n = nums.length; return nums[n-k]; }2、维护一个大小为k的堆用优先队列来实现小根堆,堆顶是k个元素里最小的,k个数字之

2020-06-29 10:52:24 228

原创 530. 二叉搜索树的最小绝对差 中序遍历

530. 二叉搜索树的最小绝对差难度:简单利用二叉搜索树的性质,对二叉搜索树进行中序遍历,得到的结果是一个递增序列。每次记录下前一个的pre中序遍历,根的前一个元素是左孩子,右孩子的前一个是根题目描述解题思路整体就是按照中序遍历,记录前一个元素,然后更新最小值/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tree

2020-06-28 16:16:45 138

原创 263. 丑数

263. 丑数难度:简单又是丑数又是快乐数的,瞧不起哪个数呢题目描述解题思路用5 3 2 依次去除以给定的数,如果某一轮全部不能整除那么说明不是丑数,如果最后得到1就是丑数/* * 263. 丑数 * 2020/6/28 */ public boolean isUgly(int num) { int[] dev = new int[] {5,3,2}; while(num != 0) { int temp = num; for

2020-06-28 12:31:13 79

原创 209. 长度最小的子数组 滑动窗口+二分法

209.长度最小的子数组难度:中等2020/6/28每日一题打卡一般看到什么 子数组 连续 和 就应该想到前缀和和滑动窗口题目描述解题思路1、暴力法我好傻噢,直到求前缀和,但是不知道后续怎么做了,所以用暴力法遍历找到区间和大于s的区间/* * 209. 长度最小的子数组 * 2020/6/28每日一题打卡 */ public static int minSubArrayLen(int s, int[] nums) { int min = Integer

2020-06-28 11:54:43 226

原创 258. 各位相加

258. 各位相加难度:简单题目描述解题思路1、循环就是循环计算,直到结果小于10/* * 258. 各位相加 * 2020/6/27 */ public int addDigits(int num) { while(num >= 10) { int temp = 0; while(num != 0) { temp += num%10; num /= 10; } num = temp; } return num;

2020-06-27 20:09:28 129

原创 41. 缺失的第一个正数 原地哈希

41. 缺失的第一个正数 原地哈希难度:困难题目描述解题思路受空间和时间复杂度的限制,所以用原地哈希算法哈希函数很简单,就是在下标i的地方放i+1比如例子:3 4 -1 1交换过程是:交换-1<->3交换1<->4交换-1<->11 -1 3 4结果 2交换之后1 3 4全在正确的位置上,2不在 /* * 41. 缺失的第一个正数 * 2020/6/27每日一题 原地哈希 */ public static i

2020-06-27 19:39:11 104

原创 268. 缺失数字

268. 缺失数字难度:简单题目描述解题思路最简单的可以用桶计数或者排序,然后找到没出现过的数字。但是题目要求线性时间复杂度,所以不能排序,又只使用额外常数空间,也不能用桶计数。因为这个题里数据范围是确定的,而且只缺失一个正整数,所以可以先计算0~n的和,然后依次减去数组里的元素,剩下来的就是没出现过的。考虑到如果数组范围很大那直接算和可能会溢出,所以边加边减,一样能达到效果。1、计算累加和public int missingNumber(int[] nums) { int

2020-06-27 11:20:35 88

原创 139. 单词拆分 动态规划

139. 单词拆分难度:中等题目描述解题思路1、动态规划看标签只有一个动态规划的时候我好懵,不知道这个题根动态规划有啥关系,然后看了评论~dp数组表示当前第i位能不能由给定的字符串表示出来比如简单一点的例子leetcode,初始dp数组 1 0 0 0 0 0 0 0 0首先从0开始,依次判断由0下标开始能不能表示,到leet的时候可以,数组变成 1 0 0 0 1 0 0 0 0,直到遍历完然后可以直接以下一个true的点开始,比如这里就从下标4开始,直到结尾code,数组变成 1

2020-06-26 20:51:45 166

原创 96. 不同的二叉搜索树

96. 不同的二叉搜索树难度:中等题目描述解题思路昨天写(抄)了不同的二叉搜索树2,2里要保存所有的二叉搜索树,这个只用保存种类个数。1、记忆化递归法这个递归过程和昨天的生成全部是一样的,代码也差不多,用一个哈希表来记忆化,减少重复计算过程。每个长度有多少种可能和区间的内容无关,只跟区间的长度有关/* * 96. 不同的二叉搜索树 * 2020/6/24 */ public int numTrees(int n) { if(

2020-06-26 17:34:14 75

原创 面试题 02.01. 移除重复节点

面试题 02.01. 移除重复节点难度:简单题目描述解题思路用一个哈希set来保存出现过的元素,思路很简单/* * 面试题 02.01. 移除重复节点 */ public ListNode removeDuplicateNodes(ListNode head) { HashSet<Integer> hashSet = new HashSet<>(); ListNode nhead = new ListNode(-1); nhead.nex

2020-06-26 16:45:22 106

原创 95. 不同的二叉搜索树 II 递归方法

95. 不同的二叉搜索树 II难度:中等题目描述解题思路二叉搜索树就是根节点左边的小于根节点、右边的大于根节点递归生成 /* * 95. 不同的二叉搜索树 II * 2020/6/23 */ public List<TreeNode> generateTrees(int n) { if(n == 0) return new LinkedList<>(); return gen

2020-06-23 20:49:02 111

原创 6. Z 字形变换 模拟+找规律

6. Z 字形变换难度:中等积累知识:1、int类型定义的数组,初始化默认是02、String类型定义的数组,默认值是null3、char类型定义的数组,默认值是0对应的字符4、double类型定义的数组,默认值是0.05、float类型定义的数组,默认值是0.06、boolean类型定义的数组,默认值是false题目描述解题思路1、模拟先完全模拟生成Z字形字符串的过程,然后依次组合成最后的字符串,写的有点啰嗦但是反正答案是对了嘛/* * 6. Z 字形变换 难度:

2020-06-23 12:32:11 255

原创 2021届招银网络科技提前批笔试

2021届招银网络科技提前批笔试写在前面:第一次参加笔试,结果不重要,就当作是积累经验啦~有一些坑记录下来,后面的人看到也可以注意一下:1、每部分题目是不能往回翻页的,就是说你不能想着做完了后面的再来写前面!!!所以时间一定要分配好,特别是编程题部分,70分钟三道,如果前面的题花了很多时间,最后一道可能不难但是没时间写了。2、要自己手写全部的输入输出,类似于牛客网上的oj那种,不像力扣全部给你处理好了,只用写方法部分。注意要循环输入,最后输出也要按格式来。3、写代码的时候是没有自动不全的(功能及

2020-06-22 22:14:44 10703 5

原创 剑指 Offer 05. 替换空格

剑指 Offer 05. 替换空格难度:简单今天参加招行网络科技提前批的面试,做到了这道题,然后赶紧来刷一遍加深印象。我好菜啊哭哭题目描述解题思路先算出空格的个数,然后算出新字符的长度,然后从后往前构建新字符串。如果是空格,就依次替换成%20;如果是正常字符,就添加到后面。/* * 剑指 Offer 05. 替换空格 * 2020/6/22 */ public String replaceSpace(String s) { if(s.length() ==

2020-06-22 21:18:06 219

原创 124. 二叉树中的最大路径和 DFS

124. 二叉树中的最大路径和难度:困难继续抄答案嘿嘿题目描述解题思路参考题解:【二叉树的最大路径和】主要理解题目意思,详细图解递归,用一个全局变量来更新最大的路径值,同时返回这个以当前节点为根节点能提供的最大路径值用这个图来说明一下:对于2这个节点来说,选择1-2-4-8就不能再选择1-2-5-8所以递归返回时,要从2左边子树和右边子树所能提供的值里选择一个最大的但是返回的值只能代表这段路上的最大值,并不代表总体的最大值,用一个总体变量来记录整体最大值,max = Math.max(

2020-06-21 10:41:54 130

原创 10. 正则表达式匹配 动态规划

10. 正则表达式匹配难度:困难一到困难提就是抄题解的一天题目描述解题思路参考题解:动态规划 - 从 0 讲解,大白话好理解public boolean isMatch(String s,String p){ if (s == null || p == null) { return false; } int m = s.length(),n = p.length(); boolean dp[]

2020-06-20 11:39:04 331

原创 507. 完美数

507. 完美数难度:简单题目描述解题思路如果暴力法测试的话会超时,可以对暴力法进行优化,减少重复的计算过程。比如 28 = 214,那在计算出2是因数的时候,可以顺便把14加上去,这样只要遍历到Math.sqrt(n)。有个细节就是,比如25 = 55,但是只能加一个5,进行特殊判断一下就可以了 public boolean checkPerfectNumber(int num) { if(num <= 1) return false;

2020-06-19 11:31:39 102

原创 283. 移动零

283. 移动零难度:简单题目描述解题思路明明是很简单的题目,但是还是纠结了好久,看了评论才写出来直到应该用双指针,但是自己想的好复杂,一看评论别人写的才那么短两种思路,一种类似于快速排序的交换,把不为0的交换到前面,0交换到后面去;一种直接覆盖,如果不是0,就直接往前覆盖,用index计数,最后把后面的元素都变成01、交换/* * 283. 移动零 * 2020/6/17 双指针 */ public void moveZeroes(int[] nums) {

2020-06-19 11:10:37 126

原创 225. 用队列实现栈

225. 用队列实现栈难度:简单题目描述解题思路1、使用双端队列双端队列好简单public class MyStack { private Deque<Integer> deque; /** Initialize your data structure here. */ public MyStack() { deque = new LinkedList<>(); } /** Push element x onto stac

2020-06-17 18:05:28 131

原创 226. 翻转二叉树 递归解法前序中序后序

226. 翻转二叉树难度:简单做简单题快乐加倍题目描述解题思路递归~1、前序第一种思路,遇到空返回,如果达到叶子节点返回该节点,递归交换左右子树 /* * 226. 翻转二叉树 * 2020/6/17 */ public TreeNode invertTree(TreeNode root) { if(root == null) return null; if(root.left == null &&

2020-06-17 16:35:58 230

原创 257. 二叉树的所有路径 DFS回溯法

257. 二叉树的所有路径难度:简单题目描述解题思路/* * 257. 二叉树的所有路径 * 2020/6/17 */ public List<String> binaryTreePaths(TreeNode root) { List<String> re = new LinkedList<>(); if(root == null) return re; pathHelper(root, re, "

2020-06-17 16:00:00 320

原创 1014. 最佳观光组合 动态规划思想

1014. 最佳观光组合难度:中等 2020/6/17每日一题打卡√题目描述解题思路观光一对景点的得分是: A[i] + A[j] + i - j,有个细节就是(i < j)先遍历一遍,用一个数组来存储这个位置左边元素里A[i]+i的最大值然后再遍历依次数组,每个位置A[j] - j 加上最左边的最大值,然后更新找到最大的值/* * 1014. 最佳观光组合 */ public int maxScoreSightseeingPair(int[] A) { in

2020-06-17 11:43:07 94

原创 297. 二叉树的序列化与反序列化 层次遍历/先序遍历

297. 二叉树的序列化与反序列化难度:困难 2020/6/16每日一题打卡√题目描述解题思路1、层次遍历先层次遍历得到结果,然后也按照层次遍历的办法把结果重建回来/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; }

2020-06-16 15:27:34 296

原创 303. 区域和检索 - 数组不可变 前缀和的简单应用

303. 区域和检索 - 数组不可变难度:简单题目描述解题思路强调会多次调用sumRange方法,意思是要尽量找时间复杂度高得,不然每次都累积加可能会超时。所以用前缀和class NumArray { int[] sum; public NumArray(int[] nums) { sum = new int[nums.length+1]; for (int i = 0; i < nums.length; i++) { sum

2020-06-15 12:23:06 107

原创 728. 自除数

728. 自除数2020/6/15 难度:简单题目描述解题思路要注意的是,要判断的数字中间可能出现0,只要有0就不是自除数/* * 728. 自除数 * 2020/6/14 */ public List<Integer> selfDividingNumbers(int left, int right) { List<Integer> re = new LinkedList<>(); for (int i = left; i

2020-06-15 09:43:27 114

原创 700. 二叉搜索树中的搜索

700. 二叉搜索树中的搜索难度:简单题目描述解题思路递归解法和迭代解法,很简单 /* * 700. 二叉搜索树中的搜索 * 2020/6/14 递归解法 */ public TreeNode searchBST(TreeNode root, int val) { if(root == null || val == root.val) return root; if(val > root.val) return searc

2020-06-14 18:45:01 226

原创 242. 有效的字母异位词

242. 有效的字母异位词难度:简单题目描述解题思路1、转换成字符数组然后排序/* * 242. 有效的字母异位词 * 2020/6/14 */ public boolean isAnagram(String s, String t) { char[] s1 = s.toCharArray(); char[] t1 = t.toCharArray(); if(s1.length != t1.length) return false; Arra

2020-06-14 18:37:49 92

原创 1300. 转变数组后最接近目标值的数组和 双重二分法

1300. 转变数组后最接近目标值的数组和难度:中等 2020/6/14每日一题打卡√头昏昏题目描述解题思路题目标签里给了二分法,那就用二分法来做吧~每次查找用了两次二分法,第一个查找在数组中小于目标值的右边界,第二个查找总和大于目标值的值,左边界。最后还要比较左边和右边哪个最接近/* * 1300. 转变数组后最接近目标值的数组和 * 2020/6/14每日一题打卡√ */ public static int findBestValue(int[] arr, int

2020-06-14 17:30:08 197

原创 18. 四数之和

18. 四数之和今天正好做了一道三数之和,四数之和的思路也差不多,就顺便一起做了~基本上就是在三数之和的基础上再套一层循环和剪枝~题目描述解题思路先对数组进行排序,外面两层循环固定第一二个数,后面双指针首尾判断。要排除掉重复的情况和剪枝提高效率。/* * 18. 四数之和 * 2020/6/13 */ public List<List<Integer>> fourSum(int[] nums, int target) { Arrays.sor

2020-06-13 17:00:10 174

原创 15. 三数之和

15. 三数之和难度:中等 2020/6/12每日一题昨天的每日一题,又拖到今天才写题目描述解题思路这道题目的坑在于不能有重复的结果,解决办法是先对数组进行排序,然后选择的时候遇到重复的数字就跳过。思路是:先对数组进行排序,然后从左边开始固定第一个数字K,然后用双指针从后面的数字里查找有没有和等于-K的,如果有则加入到集合里。整体时间复杂度O(n2)/* * 15. 三数之和 * 2020/6/12 每日一题打卡 */ public List<List<I

2020-06-13 11:47:39 103

原创 205. 同构字符串 哈希表保存映射

205. 同构字符串难度:简单题目描述解题思路1、用哈希表保存映射关系/* * 205. 同构字符串 * 2020/6/10 */ public boolean isIsomorphic(String s, String t) { if(s.length() != t.length()) return false; HashMap<Character, Character> hashMap = new HashMap<>();

2020-06-10 13:15:55 161

原创 49. 字母异位词分组

49. 字母异位词分组难度:中等题目描述解题思路对于String是不是字母异味词,可以把字符串先转成字符数组,对数组进行排序,如果是字母异味词,那排序之后的结果肯定是一样的,用哈希表来存储排序后唯一的结果。如果存在就加到list中,不存在就新建一个list/* * 49. 字母异位词分组 * 2020/6/10 */ public List<List<String>> groupAnagrams(String[] strs) { List&lt

2020-06-10 10:51:24 120

原创 1179. 重新格式化部门表

1179. 重新格式化部门表行转列问题,用到了聚合函数和GROUP BY子句这里的聚合函数sum和max都行困扰了我好久,然后仔细一想,id和月份联合主键,那一个id一个月只有一份数据嘛~select id , sum(case `month` when 'Jan' then revenue else null end) as Jan_Revenue , sum(case `month` when 'Feb' then revenue else null end) as

2020-06-09 22:23:45 218

原创 196. 删除重复的电子邮箱

196. 删除重复的电子邮箱多表删除问题,学习到了:删除过程中不能查询要删除的表,但是能包装成临时表DELETE p1FROM Person p1,Person p2WHERE p1.Email = p2.EmailAND p1.Id > p2.Id也可以:DELETE FROM PersonWHERE Id NOT IN( SELECT temp.id FROM( SELECT MIN(Id) as id FROM Person

2020-06-09 21:50:27 363

原创 82. 删除排序链表中的重复元素 II

82. 删除排序链表中的重复元素 II难度:中等题目描述解题思路和1的区别是1要求保留一个重复元素,这个是要删掉重复元素,思路都差不多的,就是一些实现细节上的区别/* * 82. 删除排序链表中的重复元素 II * 2020/6/9 */ public ListNode deleteDuplicates2(ListNode head) { ListNode nhead = new ListNode(0); nhead.next = head; ListN

2020-06-09 21:20:30 90

空空如也

空空如也

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

TA关注的人

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