
算法
hdu_xiaoming
鹅厂打工人。
展开
-
21届秋招 美团客户端一面、快手Java一面、二面总结
本周参加了几家公司的面试,趁着周末进行复盘总结下。由于是校招生身份,所以面试的内容大多还是以基础为主。大致的范围是操作系统、计算机网络、数据库以及Java相关的知识然后就是算法题的考察。面试官通常会先让你做简短的自我介绍。可以挑自己觉得比较重要和出彩的部分讲,后面的问题可能就是根据你自我介绍中提到的内容:比如参与的比赛、项目,解决了什么问题,遇到了什么难点等。这一块就要求在面试前做好充足的准备,归纳好解决的问题及难点,力求在几句话内让面试官对你的贡献有简单了解。尽量往自己熟悉的方向引领,以便控制面试的节原创 2020-08-01 22:09:30 · 318 阅读 · 0 评论 -
【每日一题】回溯法:剑指 Offer 34. 二叉树中和为某一值的路径
题目输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。思路遍历二叉树,递归过程中依次用目标值减去当前节点的值,遍历过程中使用回溯法修改路径。当目标值减到零时,终止递归。代码class Solution { List<List<Integer>> res = new LinkedList<>(); LinkedList<Integer> path = new原创 2020-07-28 11:15:19 · 176 阅读 · 0 评论 -
【每日一题】剑指 Offer 36. 二叉搜索树与双向链表
题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。原题比较长,可以去力扣看。大致题意是将二叉排序树转换成有序的双向循环链表。思路题目要求递增的循环链表,即按中序遍历二叉树。判断特殊情况,如果传入节点为空,则直接返回。记录下第一个节点为head。遍历过程中依次连接【前一节点】和【当前节点】。最后将head节点和尾节点连接,返回head节点即可。代码class Solution { Node head; publ原创 2020-07-27 11:12:45 · 345 阅读 · 0 评论 -
【每日一题】力扣腾讯精选练习题50 -- 2.两数相加
题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路本题从思路上来说并不难,就是创建一个新的链表,依次判断两个链表上原创 2020-07-20 14:56:47 · 362 阅读 · 0 评论 -
剑指offer解题汇总(2)
11. 旋转数组的最小数字思路1:暴力。依次遍历一遍数组,碰到后一个元素小于前一个的,即为最小元素。时间复杂度:O(n),空间复杂度O(1)思路2:折半法。从中间将数组拆分,可以得到两个子数组,一个子数组是非递减的,一个自旋的数组(自旋数组的最后一个元素小于第一个数组)。还按照这种方式继续折半查找,直到最终数组只有两个值,小的那个即是最小值。时间复杂度:O(log n),空间复杂度O(1)注意: 有一种特殊情况,如果允许有相同的值出现,则可能会有左、中、右节点值相同的情况出现。此时无法判断哪边是旋原创 2020-07-16 20:51:09 · 180 阅读 · 0 评论 -
剑指offer解题汇总(1)
3. 数组中重复的数字思路1:使用map存节点数据,然后依次遍历判断是否出现过。时间复杂度:O(n),空间复杂度O(n)思路2:交换法。因为是长度为n的数组,数字范围是0到n-1。遍历过程中发现下标为X的位置上存的数字是y(不等于x),则判断下标为Y的位置上是否存的是Y,如果是则出现重复,如果不是则交换两者数据。时间复杂度:O(n),空间复杂度O(1)4. 二维数组中的查找思路1:暴力遍历整个二维数组,判断是否与目标值相同。时间复杂度:O(n^2),空间复杂度O(1)思路2:从二维数组左下角原创 2020-07-16 16:20:20 · 175 阅读 · 0 评论 -
【每日一题】动态规划之矩阵路径 --64. 最小路径和
题目给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。之前没有做过这个类型的题目,还是参考的力扣官方的思路。思路一创建二维数组dp,dp的每一个位置表示从当前位置到达右下角的路径和。从右下角开始遍历整个二维数组:如果是最后一行,则dp等于当前网格数字加右边格子的dp加当前网原创 2020-07-15 17:06:07 · 295 阅读 · 0 评论 -
【每日一题】124. 二叉树中的最大路径和
题目给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例2输入: [-10,9,20,null,null,15,7]-10/ 9 20/ 15 7输出: 42思路个人感觉本题题意不是很明确(可能是我理解的问题),在题意的思考上花了较多时间。最后还是没有思路,看了官方的答案。。。很多人说这题并不难原创 2020-07-14 07:44:34 · 221 阅读 · 0 评论 -
【笔试面试】研发岗面试算法高频题
二叉树的右视图题目给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释:1 <—/ 2 3 <—\ 5 4 <—思路主要思路是依次(根,左,右)将节点压入栈内,再用一个栈存储节点对应的深度。用一个HashMap存储一层的最右边的节点。从栈内取出节点和深度。更新维护当前最.原创 2020-07-11 22:26:51 · 326 阅读 · 0 评论 -
【每日一题】142. 环形链表 II
题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。难度: mid思路本题在面试中出现的频率较高,需特别注意下。常见的解法有两种:1.使用HashSet存储ListNode引用,依次遍历整个链表。若当前节点未在HashSet出现过,则将其加入set中,继续遍历下一节点。若已经在set中存在,则表示找到入口,直接返回。该原创 2020-07-11 17:11:27 · 205 阅读 · 0 评论 -
【每日一题】148. 排序链表
要求:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5思路由O(n log n) 的时间复杂度联想到二分法,从而想到归并排序。如果使用的是数组,则需另外开辟n的空间,本题是链表无需开辟额外空间。如果使用递归做法,空间复杂度为O(log n)原创 2020-07-10 15:37:16 · 233 阅读 · 0 评论 -
【基础算法】常用内部排序算法总结--快速排序
先来说下面试中常问到的快速排序算法。快排算法属于交换排序算的一种,时间复杂度O(nlogn),空间复杂度O(logn)~O(n),是一种不稳定的排序算法。快排的核心思想是每次将枢纽值(一般选择第一个元素为枢纽值)移动到最终位置。然后对最终位置两边的子数组分别采用快速排序,直到子数组的长度为1时终止。递归版本的快排代码如下:public static voidquickSort(int[] list, int low, int high) { if (low >= high) return; i原创 2020-07-09 16:28:03 · 217 阅读 · 0 评论 -
招银 2020秋招 java笔试题 洗牌
题目:洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起来就可以了。 例如有6张牌,最开始牌的序列是1,2,3,4,5,6。首先分成两组,左手拿着1,2,3;原创 2020-06-23 09:00:15 · 3894 阅读 · 0 评论 -
力扣周赛 第194场 5442. 避免洪水泛滥
题目原题链接你的国家有无数个湖泊,所有湖泊一开始都是空的。当第 n 个湖泊下雨的时候,如果第 n 个湖泊是空的,那么它就会装满水,否则这个湖泊会发生洪水。你的目标是避免任意一个湖泊发生洪水。给你一个整数数组 rains ,其中:rains[i] > 0 表示第 i 天时,第 rains[i] 个湖泊会下雨。rains[i] == 0 表示第 i 天没有湖泊会下雨,你可以选择 一个 湖泊并 抽干 这个湖泊的水。请返回一个数组 ans ,满足:ans.length == rains.leng原创 2020-06-21 16:42:50 · 429 阅读 · 0 评论