- 博客(517)
- 资源 (1)
- 收藏
- 关注
原创 LeetCode经典面试题70,爬楼梯
题目地址https://leetcode-cn.com/problems/climbing-stairs/思路分析这个是一个简单的递推题目,搞懂了其实就是一个斐波那契数列。你想的没错,就是你刚开始学编程时,那个兔子繁殖的问题如果一开始有一对兔子,它们每月生育一对兔子,小兔在出生后一个月又开始生育且繁殖情况与最初的那对兔子一样,那么一年后有多少对兔子?答案是,每月兔子的总数可以用以下数列表示:1,1,2,3,5,8,13,21,34,55,89,144,233…来想一下,第n阶台阶可以从那一节上爬
2021-08-08 12:52:42
268
原创 分享几个疫情之下的算法面试题(一)
前言最近由于疫情被裁员,还得在大环境不好的情况下面试,有点伤。分享几个我最近被问到的算法面试题把指定元素第一次出现的位置思路:立马就想到二分,因为返回的是第一次出现的位置,所以还得和前面的数比较一下public class Solution { public static void main(String[] args) { Solution solution ...
2020-07-04 08:38:06
558
原创 算法精讲:贪心
介绍贪心算法是在每一步选择中都采取当前最好的或者最优的选择,从而导致最终的结果是最好的或者最优的。贪心算法可以解决解决一些最优化问题,如求图中的最小生成树,求哈夫曼编码。算法的思想还是比较容易理解的,难的是问题能否用贪心解决,贪心的具体策略是什么?翠花,上题。练过几个题后估计你就会有自己的评估了分发饼干题目来源:LeetCode 455.分发饼干题目描述:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满
2020-06-26 14:23:40
362
原创 算法精讲:动态规划
介绍动态规划并不是一种具体的算法,而是一种思想,简单来说就是缓存+枚举,把求解的问题分成许多阶段或者多个子问题,然后按顺序求解各子问题。前一子问题的解为后一子问题提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。所以动态规划一般用来求最优解(对子问题进行决策),求种类数(对子问题进行加和)先分享几个经典的动态规划实现,后续再分析几个面试题最长上升子序列数塔问题最长公共子串背包问题
2020-06-25 11:00:43
421
原创 2个线程交替打印大小写英文字母
题目代码public class Solution { private static volatile boolean flag = true; public static void main(String[] args) throws InterruptedException { char[] result = new char[52]; ...
2020-03-28 10:37:55
902
1
原创 指定元素第一次出现位置
题目思路:立马就想到二分,因为返回的是第一次出现的位置,所以还得和前面的数比较一下public class Solution { public static void main(String[] args) { Solution solution = new Solution(); int[] array = {1, 1, 1, 4}; ...
2020-03-26 17:17:28
687
原创 最少猎头拿到全部简历问题
题目已知猎头跟简历的对应关系,猎头手中的简历可能重叠。找到能获取全部简历的最少猎头eg:A 1 2 3 4B 2 3 5C 4 5 6D 5 6 7 8E 1 4 6result: [A, D]贪心有可能拿不到最优解,用回溯可以拿到最优解public class ForShow { public static void main(String[] args) {...
2020-03-26 17:15:06
505
原创 输出频率最高且最先出现的字符
题目假设有一个字符串,字符串内部的所有字符都是在ascii编码的范围内,编码求出字符串中出现频率最高的字符,如果频率最高的字符有几个字符出现的频率一样,则输出最先出现的字符。如输入串为 “hello world, every body!”,则输出频率最高且最先出现的字符。方法定义:char getMaxOccurChar(String str)代码...
2020-03-26 16:57:51
716
原创 二分
二分查找算法二分查找算法的变种查找第一个值等于给定值的情况查找最后一个值等于给定值的情况查找第一个大于等于给定值的情况查找最后一个小于等于给定值的情况参考博客[1]https://mp.weixin.qq.com/s/YbAfGfGdy0WEdEWKV0B5Cg...
2020-03-25 23:20:32
216
原创 LeetCode 面试题 17.14. 最小K个数
思路题目地址:https://leetcode-cn.com/problems/smallest-k-lcci/思路:最小堆的简单应用代码public class Solution { public int[] smallestK(int[] arr, int k) { int[] result = new int[k]; PriorityQueu...
2020-03-23 19:00:54
294
原创 LeetCode 215. 数组中的第K个最大元素
思路题目地址:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/思路:代码
2020-03-23 18:45:44
272
原创 LeetCode 61. 旋转链表
思路题目地址:https://leetcode-cn.com/problems/rotate-list/思路:算出链表的长度lengthk = k % length,为0的话直接返回原来的头节点即可头尾相接,此时最新的头节点为原来的头节点往后走length-k步,断开length-k-1和length-k-1的netx指针即可代码public class Solution {...
2020-03-18 21:55:30
208
原创 LeetCode 19. 删除链表的倒数第N个节点
思路题目地址:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/思路:遍历2次,第一次得出链表长度,第二次上length-n+1的节点双指针,第一个指定先向前移动n次,然后第一个指针和第二个指针同时移动,当第一个指针到达链表的尾节点时,第二个指针到达倒数第n个节点为了编码方便,在原先的链表上加一个哨兵节...
2020-03-18 19:23:57
133
原创 LeetCode 5. 最长回文子串
思路题目地址:https://leetcode-cn.com/problems/longest-palindromic-substring/思路:解法很多种,我用DP解决了,递推方程如下,i为起点,j为终点当j-i>=2时dp[i][j]=dp[i+1][j-1]+2所以得提前初始化长度为1和2的回文子串代码public class Solution { public...
2020-03-15 15:20:24
189
原创 LeetCode 982. 按位与为零的三元组
思路题目地址:https://leetcode-cn.com/problems/triples-with-bitwise-and-equal-to-zero/思路:上来就是3重循环暴力一波,超时了。后来想到可以把第1个和第2个数与操作的返回值缓存一下,如213和123,暴力的话得4次运算。缓存一下的话用3次运算。能省下不少时间,而且0 <= A[i] < 2^16,所以2个数与操作...
2020-03-15 11:18:07
217
原创 LeetCode 300. 最长上升子序列
思路题目地址:https://leetcode-cn.com/problems/longest-increasing-subsequence/思路:简单的模板题代码public class Solution { public int lengthOfLIS(int[] nums) { int max = 0; int[] dp = new int[...
2020-03-15 00:12:51
186
原创 LeetCode 27. 移除元素
思路题目地址:https://leetcode-cn.com/problems/remove-element/submissions/思路:把要去掉的元素移动到数组的最后即可。好吧,我自己写的代码很长,官方题解的双指针好像代码很短,而且思路很清晰代码public class Solution { public void swap(int[] nums, int a, int b)...
2020-03-14 23:52:59
179
原创 LeetCode 788. 旋转数字
思路题目地址:https://leetcode-cn.com/problems/rotated-digits/思路:模拟一下即可代码我看了一下官方的题解,我这里是用了一个map,其实搞复杂了,我把优化的点写到代码上把public class Solution { public int rotatedDigits(int N) { Map<Integer, ...
2020-03-14 20:14:52
227
原创 LeetCode 46. 全排列
思路题目地址:https://leetcode-cn.com/problems/permutations/思路:看下图,按顺序依次确定数字,通过swap获的所有情况代码public class Solution { public List<List<Integer>> permute(int[] nums) { List<List&...
2020-03-14 18:46:56
182
原创 LeetCode 191. 位1的个数
思路题目地址:https://leetcode-cn.com/problems/number-of-1-bits/题目中说到给的是无符号整数(无符号数只能表示非负数,即0和正数),所以我们不用考虑为负数的情况思路1:不断&1,直到输入的数变成0思路2:巧用n&(n-1),效率更高可以看到n&(n-1)会把n的二进制中的最左边的1去掉,因此不断进行n&(n...
2020-01-04 13:00:39
568
原创 LeetCode 231. 2的幂
思路题目地址:方法1:不断除2,结果为1则是2的幂,否则不是方法2:用数学中的log函数,看结果是否是整数,例如log2(8)=3,log2(6)= 2.5849625007方法3:n > 0 且 n & (n - 1) == 0代码方法1:public boolean isPowerOfTwo(int n) { if (n == 0) { re...
2019-12-21 18:01:56
483
原创 LeetCode 19.删除链表的倒数第N个节点
题目地址:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/思路:两次遍历法这个问题可以转变为删除从列表开头数起的第 (L - n + 1)个结点,其中 L是列表的长度。只要我们得到列表的长度 L(遍历一次),再删除地L-n+1个节点即可,代码还是比较简单的,就不再写了一次遍历法这是面试官期待的...
2019-09-04 14:21:39
511
原创 LeetCode 49. 字母异位词分组
题目地址:https://leetcode-cn.com/problems/group-anagrams/submissions/思路:将每个字符串排序一下,key=排序后的字符, value=原始的字符,放在map中即可AC代码:class Solution { public List<List<String>> groupAnagrams(Str...
2019-05-25 21:58:04
543
原创 LeetCode 20. 有效的括号
题目地址:https://leetcode-cn.com/problems/valid-parentheses/思路:匹配到则弹出栈顶,元素也不放,否则把元素放到栈里AC代码:class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack&...
2019-05-24 22:06:54
510
原创 LeetCode 206. 反转链表
题目地址:https://leetcode-cn.com/problems/reverse-linked-list/思路:用一个temp节点保存下一个的节点即可AC代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; *...
2019-02-20 01:05:18
501
原创 剑指offer 面试题14
题目:给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m].请问k[0]k[1]…*k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18.思路:定义函数f(n)为长度为n的绳子剪成若干段后各段长度乘积的最大值。在剪第一刀的时候,我们有n-1...
2018-08-25 14:03:52
695
原创 LeetCode 42. 接雨水
题目地址:https://leetcode-cn.com/problems/trapping-rain-water/description/思路:刚开始我想一段一段的遍历过去求和,要考虑的情况较多,实现起来也比较复杂, 对每一个柱子能存多少水求和比较简单,这样只需要获取这个柱子左边的最高高度和这个柱子右边的最高高低,2者的最小值就是这个柱子的存水量AC代码1:class Solu...
2018-08-25 13:48:01
720
原创 LeetCode 62. 不同路径
题目地址:https://leetcode-cn.com/problems/unique-paths/description/思路:递归或者动态规划超时代码:class Solution { public int uniquePaths(int m, int n) { // 在网格边界的格子只能有一种走法 if (m == 1 || n == ...
2018-08-25 11:31:51
612
原创 牛客网SQL练习
2.查找入职员工时间排名倒数第三的员工所有信息数据库行数从0开始计数,(limit m,n)返回第m数据之后的n条数据(包含第m条数据)
2018-06-04 19:48:08
817
原创 从数组中获取最大的两个值
思路:考虑到最大值有可能在第一位,不能把最大值和次大值都赋值为数组的第一个数代码:public class Test { public static void main(String[] args) { int[] a = {9, 3, 9, 4, 3, 3}; int[] b = {9, 8, 7, 6, 5}; int[] c = {9...
2018-03-01 16:09:03
3540
3
原创 LeetCode 145. Binary Tree Postorder Traversal
题目地址:https://leetcode.com/problems/binary-tree-postorder-traversal/description/思路:二叉树的后序遍历AC代码(递归实现)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode...
2018-02-26 10:10:17
577
原创 LeetCode 94. Binary Tree Inorder Traversal
题目地址:https://leetcode.com/problems/binary-tree-inorder-traversal/description/思路:二叉树的中序遍历AC代码(非递归实现)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode ...
2018-02-26 09:33:04
554
原创 LeetCode 144. Binary Tree Preorder Traversal
题目地址:https://leetcode.com/problems/binary-tree-preorder-traversal/description/思路:二叉树的先序遍历AC代码(非递归实现)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode...
2018-02-25 22:02:19
531
原创 LeetCode 220. Contains Duplicate III
题目地址:https://leetcode.com/problems/contains-duplicate-iii/description/思路:刚开始直接暴力,先是错误,再是超时错误代码1:(这个是没有考虑num[i]-num[j]上溢的情况)public class Solution { public boolean containsNearbyAlmostDup
2018-02-05 11:19:36
571
原创 Java版表达式计算器
支持四则运算和小数import java.util.Scanner;import java.util.Stack;/** * @Author : Li limin * @Description : * @Date : Created in 16:05 2017/8/3 */public class TestJava { //具体代表哪个符号可以看getLevel函数
2017-08-17 20:04:28
2074
原创 「游族杯」上海市高校程序设计邀请赛暨华东师范大学第九届 ECNU Coder 程序设计竞赛
A.足球锦标赛题目地址:http://acm.ecnu.edu.cn/contest/16/problem/A/思路:数字增加1翻一次,经过一个两位数的整数翻10次,如从9翻到10需要翻10次,即1+9,经过一个三位数的整数翻19次,如从99到100需要翻19次,即1+9+9AC代码:import java.util.Scanner;public class Main {
2017-05-24 20:45:11
1162
原创 计蒜客练习
题目地址:https://nanti.jisuanke.com/t/20AC代码:import java.util.Arrays;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in)
2017-05-19 16:51:12
1021
原创 Codeforces Round #414
B. Cutting Carrot题目地址:http://codeforces.com/contest/794/problem/B思路:三角函数的简单应用,三角函数里面的参数是弧度制AC代码:import java.text.DecimalFormat;import java.util.Scanner;public class Main { public static
2017-05-19 11:06:33
687
原创 Educational Codeforces Round 21
B. Average Sleep Time题目地址:http://codeforces.com/contest/808/problem/B思路:简单数组压缩,注意要用longAC代码:import java.text.DecimalFormat;import java.util.Scanner;public class Main { static long[] num
2017-05-18 15:51:39
786
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人