
面试准备
下个路口见_20
Keep coidng!Keep learning!
展开
-
leetcode50:Pow(x, n)
思路:直接用循环来做,会提示超时。我们可以用递归来折半计算,每次把n缩小一半,这样n最终会缩小到0,任何数的0次方都为1,这时候我们再往回乘,如果此时n是偶数,直接把上次递归得到的值算个平方返回即可,如果是奇数,则还需要乘上个x的值。还有一点需要引起我们的注意的是n有可能为负数,对于n是负数的情况,我们可以先用其绝对值计算出一个结果再取其倒数即可。参考:http://www.cnblogs...原创 2018-09-23 10:02:53 · 238 阅读 · 0 评论 -
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 · 333 阅读 · 0 评论 -
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 · 358 阅读 · 0 评论 -
leetcode56:Merge Intervals
思路:典型的区间合并问题,笔试中也经常遇到,可以将区间先进行排序,然后按顺序对能合并的区间进行合并即可,需要注意的是最后一个区间,如果不能和之前的区间进行合并,最后一个区间就会被遗漏,这里的做法是添加一个辅助结尾区间,intervals.add(new Interval(Integer.MAX_VALUE, Integer.MAX_VALUE));这样最后一个有效区间就能进行处理了。cl...原创 2018-09-23 18:30:12 · 229 阅读 · 0 评论 -
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 · 224 阅读 · 0 评论 -
【面试题】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 · 250 阅读 · 0 评论 -
LeetCode3. Longest Substring Without Repeating Characters
思路:设定两个指针i,index,i负责遍历,index负责记录遍历过程中无重复字符的子串的开头,如果遍历过程中子串出现了重复字符,则将index指针指向重复字符的后一位,并计算长度,与最大值max进行比较,并更新重复字符的下标。详细解答参考:https://www.cnblogs.com/StrayWolf/p/6701197.html?utm_source=itdadao&ut...原创 2018-09-07 16:33:44 · 230 阅读 · 0 评论 -
LeetCode2: Add Two Numbers
思路:同时遍历两个链表,超过10的需要进位,如果最后一位也超过10了,需要将结果链表多扩展一位,如果链表长度不一样,需要对没遍历完的链表继续处理完。比如:2->4->95->6->4==>7->0->4->1代码:public ListNode addTwoNumbers(ListNode l1, ListNode l2...原创 2018-09-07 14:39:06 · 180 阅读 · 0 评论 -
【面试题】多区间二分查找
接上篇ip地址转整数。题目1:设计一个数据结构,里面包含ip地址的范围以及该范围内ip地址对应的城市,ip地址均采用整数形式表示。class IP2City{ String city;//如果city有id,用id也可以 Long start; Long end;}题目2:如果给你一个ip地址,快速判断它属于哪个城市,各个ip区间没有重叠的情况。当时的做法是:对n个区间对...原创 2018-09-07 12:11:02 · 653 阅读 · 0 评论 -
【面试题】将ip地址转换成整数
题目:将ip地址转换成整数开始用了最粗暴的方法,将四段分别转换成二进制连接起来,然后扫描一遍,累加求和。效率太低。假设ip地址:110.111.112.113,即为A.B.C.D,转换成整数只需要将D左移0位(不需要移动),C左移8位,B左移16位,A左移24位即可。public class IP2Integer { public static void main(String[...原创 2018-09-07 10:16:15 · 4530 阅读 · 0 评论 -
leetcode20:Valid Parentheses
思路:括号匹配,每当出现右括号时,都和左边最近的进行匹配,如果能匹配,则消除,否则,则为不匹配。操作顺序符合栈的特点。代码:public class ValidParentheses20 { public static void main(String[] args) { String s = "([])[{}()(())]"; System.out.println(i...原创 2018-09-10 16:06:18 · 193 阅读 · 0 评论 -
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&&q!=null){ if(p....原创 2018-09-10 15:42:34 · 176 阅读 · 0 评论 -
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 · 204 阅读 · 0 评论 -
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 · 164 阅读 · 0 评论 -
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 · 250 阅读 · 0 评论 -
leetcode66:Plus One
思路:从后往前加,记录进位即可,但需要考虑各位全为9的情况,这样高位进位,需要将数组长度增加1个位置,这种情况出现的概率比较低,所以如果高位有进位,新开一个数组将原来计算的结果保存进去即可。...原创 2018-09-23 20:29:40 · 281 阅读 · 0 评论 -
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 · 317 阅读 · 0 评论 -
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 · 295 阅读 · 0 评论 -
leetcode49:Group Anagrams
思路:这道题让我们群组给定字符串集中所有的错位词,所谓的错位词就是两个字符串中字母出现的次数都一样,只是位置不同,比如abc,bac, cba等它们就互为错位词,那么我们如何判断两者是否是错位词呢,我们发现如果把错位词的字符顺序重新排列,那么会得到相同的结果,所以重新排序是判断是否互为错位词的方法,由于错位词重新排序后都会得到相同的字符串,我们以此作为key,将所有错位词都保存到map中,然后...原创 2018-09-22 19:07:17 · 234 阅读 · 0 评论 -
【面试题】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 · 435 阅读 · 0 评论 -
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<List<In...原创 2018-09-22 18:08:29 · 248 阅读 · 0 评论 -
leetcode46:Permutations
思路:排列问题,深度搜索+交换。代码:public class Permutations46 { public static void main(String[] args) { int[] num= {1,2,3}; System.out.println(permute(num)); } public static List<List<Integer...原创 2018-09-22 16:59:36 · 248 阅读 · 0 评论 -
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 · 286 阅读 · 0 评论 -
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 · 293 阅读 · 0 评论 -
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 · 249 阅读 · 0 评论 -
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 · 198 阅读 · 0 评论 -
【面试题】棋盘走法总数问题
题目:给定一个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 · 1716 阅读 · 0 评论 -
【面试题】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 · 248 阅读 · 0 评论 -
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 · 379 阅读 · 0 评论 -
leetcode22: Generate Parentheses
思路:最终符合要求的字符串中,左括号和右括号个数都是n,而且在字符串生成过程中,左括号的剩余个数一定小于等于右括号剩余个数,如果左右括号剩余个数都为0,说明找到一个符合题意的字符串了,保存下来。所以可以采用递归,分别添加左括号和右括号,根据以上条件设置递归出口。代码:public class GenerateParentheses22 { public static void m...原创 2018-09-11 09:54:35 · 192 阅读 · 0 评论 -
leetcode73:Set Matrix Zeroes
思路:使用常量的额外空间,肯定是要用数组的某一部分来记录0的位置,所以考虑采用第0行和第0列来记录(1,1)-->(n,n)中0的位置,因为之后第0行和第0列的值会改变,所以需要提前判断0行0列是否有0,最后做处理。代码:public class SetMatrixZeroes { public static void main(String[] args) { i...原创 2018-09-25 10:11:02 · 308 阅读 · 0 评论 -
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 · 216 阅读 · 0 评论 -
leetcode215:Kth Largest Element in an Array
思路:参考TopK的Quick Select做法https://blog.youkuaiyun.com/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 · 182 阅读 · 0 评论 -
面试中常被问到的TopK问题
面试过程中,经常会遇到面试官问你,给你40亿个数,找出其中最大的100个数。参考:https://www.cnblogs.com/en-heng/p/6336625.html解决Top K问题有两种思路:1.最直观:小顶堆(大顶堆 -> 最小100个数)维护一个100个数的小根堆,从101个数开始,每次与堆顶元素相比,如果比堆顶元素大,就将堆顶元素替换掉,然后重新调整堆,这样...原创 2018-09-16 15:20:34 · 464 阅读 · 0 评论 -
【面试题】给多个无序正整数,求中位数
题目:给你很多很多正整数,但它们是无序的,找出它们的中位数。最开始就想说使用快排,先将这些整数进行排序,然后找到中位数,但又想到可能不是面试官想要的答案,于是又采用了其他方法,最终也没完全解决出来。【经验总结:当面试官问了一个算法题后,如果想不到优化一点的方法,就先把能想到的解决方案告诉他,即使这种方案可能很烂[笑哭],然后再考虑下一步的优化,不要总想着一下就能找到最优的解法,这样最终可能...原创 2018-09-16 14:48:10 · 1317 阅读 · 0 评论 -
【面试题】整数N的二进制中1的个数
题目:求整数N的二进制中1的个数1.循环除以2,然后对每次的余数进行判断;2.利用位运算,效率更高;将n的每个位和1按位与,以此来判断该位是否为1public class NumberOfOne { public static void main(String[] args) { System.out.println(numberOfOne(0)); Syste...原创 2018-08-25 09:35:34 · 348 阅读 · 0 评论 -
【面试题】将矩阵反对角线输出
矩阵:[[1,2,3,4,5], [6,7,8,9,10],[11,12,13,14,15]];输出:5 4 10 3 9 15 2 8 14 1 7 13 6 12 11 1.先打印对角线右上角,包括对角线2.再打印对角线左下角。public class PrintMatrix { public static void main(String[] args) { ...原创 2018-08-24 20:12:31 · 2379 阅读 · 0 评论 -
打印出某个路径下所有的文件夹和文件
横向:循环,纵向:递归public class PrintFiles { public static void main(String[] args) { File dir = new File("D:/ConditionTestManyToMany"); ArrayList<String> list = new ArrayList<>(); L...原创 2018-08-19 14:31:18 · 910 阅读 · 0 评论 -
【面试题】sychronized中类锁和对象锁的区别
问:谈一谈sychronized中类锁和对象锁的区别。答:类锁和对象锁是两种不同的锁,对静态方法加锁或者使用sychronized(XX.class)相当于加了类锁,对实例方法加锁或者采用sychronized(this或对象)相当于加了对象锁,区别在于对于同一个类的不同实例来说,如果加了类锁,那么在一个线程获得类锁后,其他线程即使是持有同一个类的不同的实例,也得等待类锁的释放,因为它们竞争的...原创 2018-08-26 10:38:57 · 1057 阅读 · 0 评论 -
【面试准备】生产者消费者-BlockingQueue
题目:有两个线程A,B, A线程每200ms就生成一个[0,100]之间的随机数, B线程每2S中打印出A线程所产生的增量随机数。一、采用阻塞队列来做。public class TestBlockingQueue { static BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(10);...原创 2018-08-22 11:03:09 · 776 阅读 · 0 评论