自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 问答 (1)
  • 收藏
  • 关注

原创 leetcode股票买卖问题【六连杀】

一次交易,找到买点最低,卖点最高即可。但限制条件是:卖点必须在买点之后。所以很适合栈来操作,遇到比栈顶小的元素,就入栈,否则,将当前元素减去栈顶元素,然后不断更新最大值即可。class Solution { public int maxProfit(int[] prices) { if (prices == null || prices.length == 0){ return 0; } Deque<Inte..

2020-12-19 16:24:55 175

原创 Logback日志名和日志内容配置增加ip等信息

Logback日志名和日志内容配置增加ip等信息最近线上有个需求,将每个服务的多个实例打出的日志在日志名称和内容里增加ip信息,首先当然是先百度(Google)一下,看看实现方式。日志内容里增加ip信息创建一个类继承自ch.qos.logback.classic.pattern.ClassicConverter重写convert()方法,在该方法内返回ip信息public class...

2019-11-02 14:12:47 3404 1

原创 JWT授权访问API

对于一个项目来说,里面的API接口会有很多,但通常都是需要授权访问的,常见的做法之一是通过用户登录判断用户身份的合法性,然后利用用户信息生成token,以后带着token来访问接口,而生成token的方式之一就是jwt(JSON Web Token)。关于JWT的含义和结构,网上介绍很多,不再赘述。可以参考:https://jwt.io/introduction/。这里只做一个简...

2019-09-15 15:30:32 317

原创 linux 下sh命令:command not found

1.使用cat -A 文件名 查看文件中是否存在特殊字符;2.本次出现的问题主要在于每行结尾处存在^M特殊字符,比如:#!/bin/sh^M$,解决方法是:使用vi打开文本文件 vi test.sh命令模式下输入 :set fileformat=unix :wq3.然后再使用sh命令执行文件就正常了。 ...

2019-02-27 17:02:17 4764

原创 leetcode73:Set Matrix Zeroes

思路:使用常量的额外空间,肯定是要用数组的某一部分来记录0的位置,所以考虑采用第0行和第0列来记录(1,1)--&gt;(n,n)中0的位置,因为之后第0行和第0列的值会改变,所以需要提前判断0行0列是否有0,最后做处理。代码:public class SetMatrixZeroes { public static void main(String[] args) { i...

2018-09-25 10:11:02 248

原创 leetcode72:Edit Distance

思路:设dp[i][j]表示word1中0-i个字符转换成word2中0-j个字符需要的最少次数,先对0行和0列所有元素进行初始化,然后从1行1列开始往后递推,最终将dp数组填充满,dp[row][col]即为最终结果。状态转移方程为:if(word1[i]==word2[j]):dp[i][j]=dp[i-1][j-1];else:dp[i][j]=Math.min(dp...

2018-09-24 16:11:39 165

原创 leetcode70:Climbing Stairs

思路:设f(n)为从1爬到第n层台阶的走法,则f(n)=f(n-1)+f(n-2)。代码:public class ClimbingStairs { public static void main(String[] args) { System.out.println(climbStairs2(44)); } public static int climbStair...

2018-09-24 14:45:32 237

原创 leetcode67:Add Binary

思路:从右边开始,逐位相加,包括进位。代码:public class AddBinary67 { public static void main(String[] args) {// System.out.println(addBinary("11", "1")); System.out.println(addBinary("1", "111")); } publi...

2018-09-23 20:59:58 253

原创 leetcode66:Plus One

思路:从后往前加,记录进位即可,但需要考虑各位全为9的情况,这样高位进位,需要将数组长度增加1个位置,这种情况出现的概率比较低,所以如果高位有进位,新开一个数组将原来计算的结果保存进去即可。...

2018-09-23 20:29:40 219

原创 leetcode64:Minimum Path Sum

思路:跟之前走方格的题差不多,只是状态转移方程稍微改变一下。dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];。代码:public class MinimumPathSum64 { public static void main(String[] args) {// int[][] num = { { ...

2018-09-23 20:06:35 213

原创 leetcode63:Unique Paths II

思路:在Unique Paths上多加了一些障碍点,做法同Unique Paths类似,只是在初始化和计算dp[i][j]的时候,需要判断i行j列是否为障碍点,如果是,表示路径不通,置为0,否则正常计算。dp[i][j]=dp[i - 1][j] + dp[i][j - 1]。代码:public class UniquePathsII63 { public static void...

2018-09-23 18:57:14 262

原创 leetcode56:Merge Intervals

思路:典型的区间合并问题,笔试中也经常遇到,可以将区间先进行排序,然后按顺序对能合并的区间进行合并即可,需要注意的是最后一个区间,如果不能和之前的区间进行合并,最后一个区间就会被遗漏,这里的做法是添加一个辅助结尾区间,intervals.add(new Interval(Integer.MAX_VALUE, Integer.MAX_VALUE));这样最后一个有效区间就能进行处理了。cl...

2018-09-23 18:30:12 176

原创 leetcode55:Jump Game

思路:遍历数组,并将当前位置能到达的位置全部置为true,遍历完成后后检查最后一个位置是否为true即可。代码:public static void main(String[] args) {// int num[] ={2,3,1,1,4};// int num[] ={3,2,1,0,4}; int num[] ={2,3,1,1,4}; System.out....

2018-09-23 15:46:22 159

原创 【面试题】leetcode62:Unique Paths

瓜子面试题思路:动态规划求解即可。代码:public class UniquePaths62 { public static void main(String[] args) { System.out.println(uniquePaths(7, 3)); } public static int uniquePaths(int m, int n) { int...

2018-09-23 15:13:02 206

原创 leetcode50:Pow(x, n)

思路:直接用循环来做,会提示超时。我们可以用递归来折半计算,每次把n缩小一半,这样n最终会缩小到0,任何数的0次方都为1,这时候我们再往回乘,如果此时n是偶数,直接把上次递归得到的值算个平方返回即可,如果是奇数,则还需要乘上个x的值。还有一点需要引起我们的注意的是n有可能为负数,对于n是负数的情况,我们可以先用其绝对值计算出一个结果再取其倒数即可。参考:http://www.cnblogs...

2018-09-23 10:02:53 169

原创 leetcode49:Group Anagrams

思路:这道题让我们群组给定字符串集中所有的错位词,所谓的错位词就是两个字符串中字母出现的次数都一样,只是位置不同,比如abc,bac, cba等它们就互为错位词,那么我们如何判断两者是否是错位词呢,我们发现如果把错位词的字符顺序重新排列,那么会得到相同的结果,所以重新排序是判断是否互为错位词的方法,由于错位词重新排序后都会得到相同的字符串,我们以此作为key,将所有错位词都保存到map中,然后...

2018-09-22 19:07:17 168

原创 【面试题】leetcode48:Rotate Image

瓜子二面面试题思路:主要找到旋转前后下标之间的对应关系,matrix[j][n-1 - i] = matrix[i][j],但是在遍历过程中原数组被改变了,所以需要提前将原数组拷贝一份。代码:public class RotateImage48 { public static void main(String[] args) { int[][] num = { { 1, ...

2018-09-22 18:43:51 364

原创 leetcode47:Permutations II

思路:依然采用dfs+交换,多了去重步骤。代码:public class PermutationsII { public static void main(String[] args) { int[] num= {1,1,2}; System.out.println(permute(num)); } public static List&lt;List&lt;In...

2018-09-22 18:08:29 180

原创 leetcode46:Permutations

思路:排列问题,深度搜索+交换。代码:public class Permutations46 { public static void main(String[] args) { int[] num= {1,2,3}; System.out.println(permute(num)); } public static List&lt;List&lt;Integer...

2018-09-22 16:59:36 174

原创 leetcode45:Jump Game II

1.首先选用了dp来做,结果超时了。代码:public class JumpGameII45 { public static void main(String[] args) { int[] nums = {2,3,1,1,4}; System.out.println(jump(nums)); } public static int jump(int[] nums...

2018-09-21 21:00:11 206

原创 leetcode40:Combination Sum II

思路:本题在于数字不能重复使用,而且需要去重,可以先将数组排序,然后去重就方便了,依然采用深度优先的方法。代码:public class CombinationSumII { public static void main(String[] args) { int[] num = { 2, 5, 2, 1, 2 }; System.out.println(combina...

2018-09-21 16:40:43 202

原创 leetcode39:Combination Sum

思路:将数组中的每个点作为根节点,然后采用深度优先遍历即可,由于数字可以重复使用,所以递归时候注意下标。代码:public class CombinationSum39 { public static void main(String[] args) { int[] num ={2,3,5}; System.out.println(combinationSum(nu...

2018-09-21 15:46:40 183

原创 leetcode38:Count and Say

思路:对每个字符串判断连续相同为的个数,然后进行拼接即可。代码:public class CountAndSay { public static void main(String[] args) { System.out.println(countAndSay(1)); } public static String countAndSay(int n) { Str...

2018-09-21 15:21:06 155

原创 【面试题】棋盘走法总数问题

题目:给定一个mxn的棋盘,每次只能向右或向下走,从左上角走到右下角,有多少中走法?思路:可以使用动态规划,状态转移方程为:dp[m][n]=dp[m-1][n]+dp[m][n-1],也可以使用递归来实现。public class QiPan { public static void main(String[] args) { System.out.println(fun...

2018-09-20 09:44:38 1597

原创 【面试题】leetcode34:Find First and Last Position of Element in Sorted Array

思路:二分查找找到目标值,然后从目标值左右分别进行搜索,如果和目标值相同,则更新下标,否则结束(因为有序)。public class FindFirstandLastPositionofElementinSortedArray34 { public static void main(String[] args) { int num[] = { 5, 7, 7, 8, 8, 10 ...

2018-09-20 09:33:32 178

转载 【面试准备】操作系统知识梳理

作者:cc的小公举链接:https://www.nowcoder.com/discuss/62723?type=0&amp;order=0&amp;pos=7&amp;page=1来源:牛客网 网上看到的资料,和大家分享一下~~~~操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件。2. 进程与线程的区别。3. 进程通信的几种方式。进程间通信主要包括管道...

2018-09-16 18:16:12 427

原创 leetcode215:Kth Largest Element in an Array

思路:参考TopK的Quick Select做法https://blog.csdn.net/Somnus_k/article/details/82724704代码:public class KthLargestElementinanArray { public static void main(String[] args) { int[] arr = { 1, 8, 35, ...

2018-09-16 15:55:54 135

原创 面试中常被问到的TopK问题

面试过程中,经常会遇到面试官问你,给你40亿个数,找出其中最大的100个数。参考:https://www.cnblogs.com/en-heng/p/6336625.html解决Top K问题有两种思路:1.最直观:小顶堆(大顶堆 -&gt; 最小100个数)维护一个100个数的小根堆,从101个数开始,每次与堆顶元素相比,如果比堆顶元素大,就将堆顶元素替换掉,然后重新调整堆,这样...

2018-09-16 15:20:34 412

原创 【面试题】给多个无序正整数,求中位数

题目:给你很多很多正整数,但它们是无序的,找出它们的中位数。最开始就想说使用快排,先将这些整数进行排序,然后找到中位数,但又想到可能不是面试官想要的答案,于是又采用了其他方法,最终也没完全解决出来。【经验总结:当面试官问了一个算法题后,如果想不到优化一点的方法,就先把能想到的解决方案告诉他,即使这种方案可能很烂[笑哭],然后再考虑下一步的优化,不要总想着一下就能找到最优的解法,这样最终可能...

2018-09-16 14:48:10 1219

原创 【面试题】两个队列实现一个栈

题目:用队列来实现栈。用两个队列来回倒腾基本就可以了,假设有两个队列A、B,初始都为空,将元素放入队列A中,如果队列B不为空,将B中的元素全部取出放入A中,这样B就为空队列了,然后下次加入元素就加入到B中,如果A不为空就把A中元素全部取出放进B中,这样A就为空队列了,就这样来回倒腾就可以了。可惜面试时候太紧张,脑子转不动,直接说不会了[汗]。代码:public class Queue...

2018-09-16 10:17:34 186

原创 leetcode28:Implement strStr()

思路:直接采用了暴力匹配。代码:public class ImplementstrStr28 { public static void main(String[] args) { String haystack = "", needle = ""; System.out.println(new ImplementstrStr28().strStr(haystack, n...

2018-09-11 17:58:15 210

原创 leetcode27:Remove Element

思路:遍历数组,设定两个指针,当快指针指向的元素不为目标值时,将快指针指向元素赋值给慢指针指向元素,同时慢指针前进一步。代码:public class RemoveElement27 { public static void main(String[] args) { int[] arr ={0,1,2,2,3,0,4,2}; System.out.println(ne...

2018-09-11 16:17:16 224

原创 leetcode26:Remove Duplicates from Sorted Array

参考:http://www.cnblogs.com/grandyang/p/4329128.html思路:我们使用快慢指针来记录遍历的坐标,最开始时两个指针都指向第一个数字,如果两个指针指的数字相同,则快指针向前走一步,如果不同,则两个指针都向前走一步,这样当快指针走完整个数组后,慢指针当前的坐标加1就是数组中不同数字的个数。代码:public class RemoveDupli...

2018-09-11 15:13:24 149

原创 leetcode24:Swap Nodes in Pairs

思路:关于链表的题,主要将指针关系理清,在指针改变之前,需要将指针的后继节点保存,防止链表断开。代码:public class SwapNodesinPairs24 { public static void main(String[] args) { ListNode node1 = new ListNode(1); ListNode node2 = new ListNo...

2018-09-11 10:43:05 236

原创 leetcode22: Generate Parentheses

思路:最终符合要求的字符串中,左括号和右括号个数都是n,而且在字符串生成过程中,左括号的剩余个数一定小于等于右括号剩余个数,如果左右括号剩余个数都为0,说明找到一个符合题意的字符串了,保存下来。所以可以采用递归,分别添加左括号和右括号,根据以上条件设置递归出口。代码:public class GenerateParentheses22 { public static void m...

2018-09-11 09:54:35 147

原创 leetcode20:Valid Parentheses

思路:括号匹配,每当出现右括号时,都和左边最近的进行匹配,如果能匹配,则消除,否则,则为不匹配。操作顺序符合栈的特点。代码:public class ValidParentheses20 { public static void main(String[] args) { String s = "([])[{}()(())]"; System.out.println(i...

2018-09-10 16:06:18 146

原创 leetcode21:Merge Two Sorted Lists

public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode p =l1; ListNode q = l2; ListNode head = new ListNode(-1); ListNode tmp =head; while(p!=null&amp;&amp;q!=null){ if(p....

2018-09-10 15:42:34 132

原创 leetcode19:Remove Nth Node From End of List

代码:public class RemoveNthNodeFromEndofList19 { public static void main(String[] args) { ListNode node1 = new ListNode(1); // node1.next=null; ListNode node2 = new ListNode(2); ListNode...

2018-09-10 15:29:18 159

原创 leetcode:4Sum

思路:在3Sum基础上多加一个数,先将数组排序,然后先固定两个数i,j,设定两个指针,一个从i+1开始,一个从nums.length-1开始,根据sum和target的大小情况,分别移动两个指针,并将符合的情况保存下来。时间复杂度(O(n3))。代码:public class FourSum18 { public static void main(String[] args) {...

2018-09-10 10:29:13 121

原创 leetcode17:Letter Combinations of a Phone Number

思路:采用深度优先遍历来做,需要通过变量记录输入的数字串的位置。public class LetterCombinationsofaPhoneNumber17 { public static void main(String[] args) { String digits = "23"; System.out.println(letterCombinations(digits...

2018-09-10 10:00:56 158

空空如也

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

TA关注的人

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