leetcode刷题
zuel_Jacob
我来到这里,总要留下些什么。
展开
-
leetcode刷题 剑指offer 其他
打印从1到最大的数题目描述:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/class Solution { public int[] printNumbers(int n) { String zeros = ""; for(int i = 0; i < n; i++) { zeros += "0"; } int max = Inte原创 2021-04-01 20:08:24 · 108 阅读 · 0 评论 -
leetcode刷题 剑指offer 位运算
二进制中1的个数题目描述:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/public class Solution { // you need to treat n as an unsigned valuepublic int hammingWeight(int n ) { int res = 0; while(n != 0) { res += n & 1; n >&g原创 2021-03-27 20:49:10 · 80 阅读 · 0 评论 -
leetcode刷题 剑指offer 数学
圆圈中最后剩下的数字题目描述:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/解法1:模拟class Solution {public int lastRemaining(int n, int m) { if(n == 0 || m == 0) return -1; List<Integer> list =new ArrayList<&g原创 2021-03-27 17:34:59 · 77 阅读 · 0 评论 -
leetcode刷题 剑指offer 动态规划
斐波那契数列题目描述:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/class Solution { public int fib(int n) { if(n == 0) return 0; int[] dp = new int[n + 1]; dp[0] = 0; dp[1] = 1; for(int i = 2; i < n + 1 ;i++) { dp[i]原创 2021-03-20 10:41:50 · 88 阅读 · 0 评论 -
leetcode刷题 剑指offer 排序
调整数组顺序使得奇数位于偶数前面题目描述:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/解法1:开辟两个额外数组 public int[] exchange(int[] nums) { List<Integer> oddarr = new ArrayList<Integer>(); List<I原创 2021-03-19 15:32:59 · 80 阅读 · 0 评论 -
leecode刷题 剑指offer 搜索算法
矩阵中的路径题目描述:https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/class Solution { public boolean exist(char[][] board, String word) { char[] words = word.toCharArray(); for(int i =0; i < board.length; i++) { for(int j =原创 2021-03-15 15:31:19 · 77 阅读 · 0 评论 -
leetcode刷题 剑指offer 二分查找法
旋转数组的最小数字题目描述:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/解法:二分法,首尾中间很重要class Solution{ public int minArray(int[] numbers) { int i = 0, j = numbers.length - 1; while(i < j) { int m = (i+j)/2; if(numbers[m原创 2021-03-14 10:57:00 · 64 阅读 · 0 评论 -
leetcode刷题 字节常见面试题
字节常见面试题来源:codeTop无重复字符的最长子串题目描述:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/解题思路:滑动窗口,set判定重复,滑动窗口左右边界的移动class Solution { public int lengthOfLongestSubstring(String s) { Set<Character> set = new H原创 2021-03-06 10:29:30 · 293 阅读 · 1 评论 -
leetcode刷题 贪心算法
贪心算法主要思想:保证每次操作都是局部最优的,并且最后得到的结果是全局最优的分配饼干题目描述:https://leetcode.com/problems/assign-cookies/description/解题思路:每一次发饼干都发给食量最小的孩子,提醒数组要多用指针!class Solution { public int findContentChildren(int[] g, int[] s) { if(g.length == 0 || s.length原创 2021-03-05 21:54:36 · 155 阅读 · 0 评论 -
leetcode刷题 多线程问题
多线程顺序打印1.(阿里面试题)线程A只负责打印A,线程B只负责打印B,线程C只负责打印C,现在要求实现ABCABC依次打印。思路:打印方法的封装,线程的调度。/** * 封装打印方法类 * 在方法中实现线程调度 * @author asus * */class Myservice { public int flag = 1; public void printA() throws InterruptedException { while(true) { sync原创 2021-03-05 16:11:20 · 198 阅读 · 0 评论 -
leetcode刷题 剑指offer 树
重建二叉树题目描述:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof//** * 重建树就是找到正确的左右孩子 * @param preorder * @param inorder * @return */ public TreeNode buildTree(int[] preorder, int[] inorder) { return buildTreeHelper(preorder, 0, preo原创 2021-02-28 17:19:13 · 109 阅读 · 0 评论 -
leetcode刷题 剑指offer 链表
从尾到头打印链表题目描述:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/解法1:链表插头法/** * 头插法 * @param head * @return */ public int[] reversePrint(ListNode listNode) { ListNode head = new ListNode(-1); while(listNode != null)原创 2021-02-27 21:37:44 · 99 阅读 · 2 评论 -
leetcode刷题 剑指offer 双指针
和为S的两个数字题目描述:https://leetcode-cn.com/problems/he-wei-sde-liang-ge-shu-zi-lcof/解法1:暴力破解/** * 暴力破解:时间复杂度O(N^2) * @param nums * @param target * @return */ public int[] twoSum(int[] nums, int target) { if(nums.length == 0 && n原创 2021-02-27 09:22:31 · 63 阅读 · 0 评论 -
leetcode刷题 剑指offer 栈队列堆
用两个栈实现队列题目描述:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/class CQueue { //一个负责插入一个负责删除 LinkedList<Integer> stack1; LinkedList<Integer> stack2; public CQueue() { stack1 = new LinkedList<Intege原创 2021-02-26 10:15:13 · 104 阅读 · 0 评论 -
leetcode刷题 剑指offer 数组与矩阵专题
从今天开始备战春招提前批,每天早中晚各完成三道leetcode题目,主攻剑指offer,按照题目类型解题总结在博客中。每一道题必须用两种解法完成。数组中重复的数字题目描述:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/解法一:双指针遍历 public int findRepeatNumber(int[] nums) { for(int i = 0; i < nums.leng原创 2021-02-25 17:22:25 · 85 阅读 · 0 评论 -
leetcode刷题 从中序与后序遍历序列构造二叉树
今天这个代码是真的没看太懂,树这一块的内容还有很多琢磨的地方class Solution{ int post_idx; int[] postorder; int[] inorder; Map<Integer, Integer> idx_map = new HashMap<Integer, Integer>(); public TreeNode helper(int in_left, int in_right) { if(in_left > in_ri原创 2021-01-19 18:22:27 · 56 阅读 · 0 评论 -
leetcode刷题 路径总和
这道题我一开始只想到了用深度优先来进行思考,其实广度优先和深度优先应在树的相关题目中以同样的权重进行思考,两种方式的变形有很多,然后再添加上一下其他数据结构的辅助来进行解题。class Solution { public boolean hasPathSum(TreeNode root, int sum) { if(root == null) { return false; } Queue<TreeNode> queNode = new L原创 2021-01-18 18:06:43 · 95 阅读 · 0 评论 -
leetcode刷题 对称二叉树
好久没刷题了,手感非常差啊。这道题我一开始想的简单了,我以为就是用一个层次遍历,然后再去检查每一层是否是对称数组就可以了。但是后来通过报错发现,这和左右子树的出现顺序也是有关系,不能仅仅通过对称来判断。因此,后来看了题解解题,但是又死活有问题。最后我发现是在queue的实现上,不同的容器效果不一样,我最初是使用的,Queue<TreeNode> queue = new ArrayDeque<>();,发现这种实现不允许队列中插入空值,因此要换用另外一种实现,LinkedLis原创 2021-01-08 15:37:50 · 71 阅读 · 0 评论 -
leetcode刷题 树的的最大深度
最大深度算法其实就是遍历树算法的变形class Solution { //全部都是树遍历算法的变形 int answer = 0; public int maxDepth(TreeNode root) { if(root == null) return 0; int depth = 0; findMaxDepth(root, depth); return answer + 1; } private void fin原创 2021-01-08 11:21:35 · 68 阅读 · 0 评论 -
leetcode刷题总结 程序员必须秒杀的算法
所谓秒杀,就是背下来,用java能够迅速写出来最经典的解题代码。如果还有很长的反应时间,那就说明掌握的并不扎实。一、排序算法冒泡排序 选择排序 插入排序 归并排序 快速排序二、查找算法二分查找三、树的有关算法深度优先查找:前中后序遍历 广度优先查找后续继续更新,根据这个要求来对编码能力进行训练,快速反应,迅速写出来。...原创 2021-01-08 10:43:03 · 215 阅读 · 0 评论 -
leetcode刷题 二叉树的层序遍历
2020的最后一题啦,新年快乐,争取明年这个时候变成一个leetcode做题家class Solution { //根据广度优先查询的一种变形 public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<List<Integer>>(); Queue<TreeNode原创 2020-12-31 12:04:36 · 92 阅读 · 0 评论 -
leetcode刷题 二叉树的前中后序遍历
采用递归的方法,其中要理解何时进行添加root这一步操作在递归中很重要TreeNode数据结构代码public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { thi原创 2020-12-30 15:20:22 · 88 阅读 · 0 评论 -
leetcode刷题 设计循环队列
最重要的收获,循环问题,模运算是一个很好的办法class MyCircularQueue { int head; int tail; int[] queue; public MyCircularQueue(int k) { queue = new int[k]; head = -1; tail = -1; } public boolean enQueue(int value) { if(isFull())原创 2020-12-29 21:52:21 · 82 阅读 · 0 评论 -
leetcode刷题 移动零
这道题的难点就在于不构建新的存储空间,直接原地进行移动,因此想到了采用双指针方法,其中一个指针总是指向0,一个指针总是指向非0,然后交换他们的位置。class Solution { public void moveZeroes(int[] nums) { if(nums.length==0) { return; } int zeroPointer = 0,noZeroPointer = 0; while(zeroPointer < nu原创 2020-12-28 12:24:38 · 80 阅读 · 0 评论 -
leetcode刷题 反转字符串中的单词3
这道题很关键的一点是,java的String类是不可修改的,因此要么使用Stringbuffer,要么就只有老老实实开辟额外内存空间,我这个代码比较睿智,但是思路还是清晰的。class Solution { public String reverseWords(String s) { String res = ""; if(s.length()==0) { return res; } List<String> list = new原创 2020-12-28 10:54:43 · 59 阅读 · 1 评论 -
leetcode刷题 杨辉三角2
这一次的问题我本来以为照抄上一次的内容就能做出来,然后发现对上一版的改动还挺大的。主要就是递归的使用,以及递归代码出现的位置。class Solution { public List<Integer> getRow(int rowIndex) { List<Integer> resList = new ArrayList<Integer>(); List<Integer> beforeList = new ArrayList&原创 2020-12-27 17:18:27 · 90 阅读 · 0 评论 -
leetcode 刷题 杨辉三角
纯粹是自己写的嗷,发现了一个规律,第i行,除了首尾为1,其他各个位,假设其下标为i,则一定是由上一行下标为i-1,i的元素嘉和得到,根据此观察编写程序。class Solution { public List<List<Integer>> generate(int numRows) { List<Integer> innerList = new ArrayList<Integer>(); List<List<In原创 2020-12-26 22:13:10 · 62 阅读 · 0 评论 -
leetcode 刷题 长度最小的子数组
这一周忙着做数据库安全的期末小项目,所以一直没有刷leetcode心里还是挺不安的。说实话,刷leetcode对于我的提高我感觉到了,之前写java感觉逻辑性很差,照着算法流程图的复现能力也不行,现在慢慢提高了。以下是今天刷题的内容,我之前自己想的那个暴力破解,leetcode说我超时了,其实那个方法也是可以完成的。class Solution { public int minSubArrayLen(int s, int[] nums) { int res = 0; if(nums原创 2020-12-25 20:38:36 · 78 阅读 · 0 评论 -
leetcode刷题 最大连续1的个数
这道题本来很简单的,被我自己想复杂了好多。最近因为复习和另外的实验,停止了好久刷题,要继续努力,把差的两天的题后续补上class Solution { public int findMaxConsecutiveOnes(int[] nums) { int res = 0; if(nums.length==0) { return res; } int count = 0; int maxCount = 0; for(int原创 2020-12-19 22:06:57 · 79 阅读 · 1 评论 -
leetcode刷题 移除元素
本次收获:1.在草稿纸上进行算法推演是很有必要的 2.掌握快慢指针思想本次的代码参照了算法动画图解:算法动画class Solution { //在草稿纸上面演算很有必要 public int removeElement(int[] nums, int val) { if(nums.length==0) { return 0; } //快慢指针思想 int fast = 0,slow = 0; for(fast = 0; fast < nums.lengt原创 2020-12-16 09:52:34 · 51 阅读 · 0 评论 -
leetcode刷题 两数之和 II - 输入有序数组
秒杀了这道题加油class Solution { public int[] twoSum(int[] numbers, int target) { if(numbers.length == 0) { return null; } if(numbers.length==1&&numbers[0]==target) { return new int[]{0,0}; } for(int i = 0; i < numbers.length;i+原创 2020-12-15 19:39:28 · 54 阅读 · 0 评论 -
leetcode刷题 数组拆分1
这道题,虽然放在双指针章节里面,但是和双指针可以说毫无关系。不过收获还是挺多1.不能只想着穷举,要从数学的角度去思考最值问题,往往事半功倍2.对于基础的数据结构知识掌握还是很不够因此建立一个repository开始每天复习一下基础的数据结构算法class Solution { public int arrayPairSum(int[] nums) { //求和的最大值-》考虑其中每一个元素都大-》两两间差尽量小-》排序 Arrays.sort(nums);原创 2020-12-14 10:30:49 · 97 阅读 · 0 评论 -
leetcode刷题 翻转字符串
????AC最快的一道题,不超过5min,飘了飘了class Solution { public void reverseString(char[] s) { int left = 0 , right = s.length - 1; char temp = ' '; while(left < right) { temp = s[left]; s[left] = s[right]; s[right] = temp;原创 2020-12-13 09:52:35 · 34 阅读 · 0 评论 -
leetcde刷题 实现strStr
前两天用双指针用多了,直接就来双指针,结果调试一堆bug,还是String原生的api香啊要注意这种范围型的字符串问题,采用滑动窗口的方法,直接调用subString和equal来解题附上了自己的天坑双指针,调试了好久都有错,心态崩了class Solution { public int strStr(String haystack, String needle) { //滑动窗口方法 int res = -1; if(needle.equals(""))原创 2020-12-12 10:28:00 · 54 阅读 · 0 评论 -
leetcode刷题 翻转字符串里的单词
class Solution { /** * 没啥追求只求通过555,看了看题解 我是废物,不过练了练手,双指针更加熟悉了 * @param s * @return */ public String reverseWords(String s) { s = s.trim();//先去掉首尾空白 String res = ""; List<String> list = new ArrayList<String>(); int i = 0.原创 2020-12-11 21:27:18 · 99 阅读 · 0 评论 -
leetcode刷题 最长回文子串
看了一下题解,还有很多种方法,比如动态规划,但是看了一个下午也没看太懂。所以就先把暴力破解弄懂吧。我这个菜鸡,还要多多努力啊。主要问题在,不知道怎么列举字符串的所有子串,题解中使用的是双指针办法,固定左指针,右指针移动得到全部的子串。最后,进行回文字符串的验证时,也是采用的双指针方法来进行验证。因此双指针在数组问题中是非常重要的。别人说自己菜都是哄人的,听听就好,我是真的菜。class Solution { public String longestPalindrome(Str原创 2020-12-10 19:43:31 · 70 阅读 · 1 评论 -
leetcode刷题 字符串公共前缀
class Solution { public String longestCommonPrefix(String[] strs) { if(strs == null || strs.length == 0){ return ""; } String prefix = strs[0]; int count = strs.length; for(int i = 1 ; i < count ; i ++) { prefix = getCommon.原创 2020-12-09 21:39:51 · 132 阅读 · 0 评论 -
leetcode刷题 对角线遍历
对角线遍历的这一道题,我的解答,参照了官方题解一的思路,加入了一些注释具体题目描述:对角线遍历class Solution { public int[] findDiagonalOrder(int[][] matrix) { if(matrix == null || matrix.length == 0) return new int[0]; int N = matrix.length;//行 int M = matrix[0].length;//原创 2020-12-08 18:13:19 · 118 阅读 · 0 评论