![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
多肉葡萄
这个作者很懒,什么都没留下…
展开
-
java分布式锁学习笔记
java分布式锁学习笔记 分布式锁使用原因 在不只有一个Tomcat的情况下,如果只在java代码的内部加上了同步机制,就只在内部是可以控制并发的,但是不能控制多个Tomcat的并发,因此需要加分布式锁。 synchronized实现jvm内部的并发。 测试工具 JMeter 改进方法 1.使用redis中的setifabsent方法。 如果使用这种方法,可以保证只有当key不存在的时候才会得到锁,可以把保证并发的执行,比如在秒杀的时候我们都可以试图获得这个锁,但是真正获得锁的人才会进行秒杀的操作,而其他原创 2020-06-08 10:21:50 · 306 阅读 · 0 评论 -
合并两个排序的链表
合并两个排序的链表 题目 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 思路 判断两个链表的头结点值的大小,将小的链接到新建的头中。 (注,不可以将新节点直接指向某一链表。) 代码 public ListNode merge(ListNode list1,ListNode list2) { if (list1 == null) ...原创 2020-02-14 11:35:38 · 140 阅读 · 0 评论 -
反转链表
反转链表 题目 输入一个链表,反转链表后,输出新链表的表头。 思想 如果链表为空,则输出空,否则逆置输出,头插法(中间注释掉的部分我觉得和下面部分写的一样,但是没通过且没找到原因)。 代码 public ListNode reverseList(ListNode head) { if (head == null || head.next == null) r...原创 2020-02-12 13:17:43 · 162 阅读 · 0 评论 -
链表中倒数第k个结点
链表中倒数第k个结点 题目 输入一个链表,输出该链表中倒数第k个结点。 思路 1.如果head是空的,返回空指针 2.如果k比listnode的长度要大,返回null 3.如果k比listnode的长度小,返回正确值即可。 思想:先求出listnode的长度,进行判断 1 2 3 len1 len2 len3 代码 public ListNode findKthToTail(L...原创 2020-02-12 11:54:25 · 115 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思想 定义一个新的数组用于排序,将奇数排到新数组前面,将偶数排到后面。 将排好序的数组赋值个原来的数组,空间复杂度O(n),典型的以空间换时间==。 代码 public void reOrde...原创 2020-02-10 12:46:50 · 147 阅读 · 0 评论 -
二进制中1的个数
二进制中1的个数 题目 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思想1 设置一个标识为1,将输入整数和此标识进行与运算,如果结果不是0则计数器加1,标识符左移一位。 代码1 public int NumberOf1(int n) { int count = 0; int flag = 1; while(flag != 0){...原创 2020-02-09 12:19:36 · 175 阅读 · 0 评论 -
剪绳子
剪绳子 题目 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 思想1 使用动态规划的方法,将大问题逐渐变小,绳子可以考虑为f=f(i)*f(len...原创 2020-02-08 16:26:14 · 300 阅读 · 0 评论 -
机器人的运动范围
机器人的运动范围 题目 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? 思想 回溯法:分别寻找机器人能...原创 2020-02-03 16:29:53 · 119 阅读 · 0 评论 -
矩阵中的路径
矩阵中的路径 题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个...原创 2020-02-03 11:18:24 · 146 阅读 · 0 评论 -
旋转数组的最小数字
旋转数组的最小数字 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思想 1.输入数组是非递减数组的一个旋转可知,当扫描到前者大于后者的情况时,前半部分需要移到后...原创 2019-12-22 11:35:49 · 94 阅读 · 0 评论 -
斐波那契数列
斐波那契数列 题目 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 思想 1.递归,找到递归出口和递归体。 2.非递归,将递归体用变量存起来,循环。 代码1(递归) public static int fibonacci(int n) { if (n<2) return n; ...原创 2019-12-18 10:06:58 · 147 阅读 · 0 评论 -
用两个栈实现队列
用两个栈实现队列 思想 1.进队:将元素压入stack1中,stack2暂时不使用。 2.出队:stack2判空:如果stack2不空,弹出栈顶元素。如果stack2为空,则将stack1中所有元素压入stack2中,再弹出stack2的栈顶元素。 代码 public static void push(int node) { stack1.push(node); } ...原创 2019-12-17 10:43:59 · 122 阅读 · 0 评论 -
二叉树的下一个结点
二叉树的下一个结点 题目 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思想 分三种情况: 1.如果给定结点有右孩子,下一个结点是右孩子的最左孩子。 2.如果给定结点无右孩子且为根节点的左孩子,下一个是根节点。 3.如果给定结点无右孩子且为根节点的右孩子,则找到其为左分支的根节点,下一个为根。 代码 (注意边...原创 2019-12-16 11:52:01 · 119 阅读 · 0 评论 -
重建二叉树
重建二叉树 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思想 1.先序遍历第一个节点是根节点 2.根据中序遍历找出左子树和右子树 3.返回根节点 代码 (递归写法) public static Tre...原创 2019-12-15 14:26:52 · 100 阅读 · 0 评论 -
从尾到头打印链表
从尾到头打印链表 题目 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 思想 链表指针均向后指,因此我们想要倒序存储链表可以借助栈先进后出的思想,将链表遍历顺序压入栈中,然后再从栈中弹出存入ArrayList。 代码 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ...原创 2019-12-13 14:49:38 · 79 阅读 · 0 评论 -
替换空格
替换空格 题目 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思想 先把传入的字符串改为字符数组,对字符数组进行遍历,首先对字符串的null值进行处理,其次遇到空格转化为%20,遇到字符直接加上,最后返回字符串。 代码1(case通过率为12.50%) (没有考虑到空格在开始的情况) ...原创 2019-12-13 11:09:00 · 106 阅读 · 0 评论 -
构建乘积数组
构建乘积数组 题目 给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。 思想 根据题目可知,B[i]由上三角和下三角的矩阵乘积构成,因此,分别构建下三角矩阵C[i]和上三角矩阵D[i],二者相乘得到B[i]。 代码 public static int[] multiply...原创 2019-12-13 10:03:07 · 90 阅读 · 0 评论 -
二维数组中的查找
二维数组中的查找 题目 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思想 判断右上角的数字,如果比右上角的数字小,则舍弃右上角的一列。 如果比右上角的数字大,则判断右上角所在一列。 (代码1:case通过率为58.82%。) public stati...原创 2019-12-12 12:03:57 · 102 阅读 · 0 评论 -
数组中的重复数字
数组中的重复数字 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 思想 1.利用本题的性质,由于所有数字都在0-n-1,因此,如果没有重复则所有数字都顺序排列应该为0-n...原创 2019-12-11 11:26:20 · 144 阅读 · 0 评论 -
leecode 1038. Binary Search Tree to Greater Sum Tree
leetcode 1038.二叉搜索树到大和树 算法思想:用递归的放式搜索树,当右子树不为空时,从右子树开始加和,将加和得到的树赋给当前根节点。 代码: java class Solution { int sums = 0; public TreeNode bstToGst(TreeNode root) { if(root == null){ ...原创 2019-08-20 11:45:48 · 215 阅读 · 0 评论