![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试算法题
qqqqq1993qqqqq
这个作者很懒,什么都没留下…
展开
-
名企中等——最长公共子串
题目描述给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1。示例1输入“1AB2345CD”,“12345EF”返回值“2345”解析:注意dp的定义 : dp[i][j] str1前i个字符和str2前j个字符(以其为尾字符)的最长公共子串长度。所以初始化数组时 dp的长度均+1。先固定字符串1中的字符,然后和2中的所有字符比较。对1中的字符循环。public class Solution { /** * longest原创 2021-01-20 22:41:05 · 198 阅读 · 0 评论 -
【名企中等】寻找第K大
https://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf?tpId=117&&tqId=35010&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking题目描述有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证原创 2021-01-13 23:25:03 · 242 阅读 · 0 评论 -
名企中等——最大正方形
https://www.nowcoder.com/practice/0058c4092cec44c2975e38223f10470e?tpId=117&&tqId=35033&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking题目描述给定一个由0和1组成的2维矩阵,返回该矩阵中最大的由1组成的正方形的面积输入[[1,0,1,0,0],[1,0,1,1,1],[1,1,1,1,1],原创 2021-01-11 22:51:04 · 217 阅读 · 0 评论 -
名企中等——矩阵的最小路径和
https://www.nowcoder.com/practice/7d21b6be4c6b429bb92d219341c4f8bb?tpId=117&&tqId=35078&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking题目描述给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和原创 2021-01-02 21:33:33 · 145 阅读 · 0 评论 -
名企中等——子数组最大乘积
https://www.nowcoder.com/practice/9c158345c867466293fc413cff570356?tpId=188&&tqId=36848&rp=1&ru=/ta/job-code-high-week&qru=/ta/job-code-high-week/question-ranking题目描述给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。示例1输入[-2.5,4,0,3,0.5原创 2021-01-02 19:07:18 · 213 阅读 · 0 评论 -
名企中等——找到字符串的最长无重复字符子串
https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4?tpId=188&&tqId=36856&rp=1&ru=/ta/job-code-high-week&qru=/ta/job-code-high-week/question-ranking题目描述给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。示例1输入[2,3,4,5]返回值4原创 2020-12-29 23:15:05 · 138 阅读 · 0 评论 -
名企中等——把数字翻译成字符串
题目描述有一种将字母编码成数字的方式:‘a’->1, ‘b->2’, … , ‘z->26’。现在给一串数字,返回有多少种可能的译码结果输入“12”返回值2说明2种可能的译码结果(”ab” 或”l”)示例2输入“31717126241541717”返回值192import java.util.*;public class Solution { /** * 解码 * @param nums string字符串 数字串原创 2020-12-23 00:05:25 · 446 阅读 · 0 评论 -
名企中等——环中路径
一个环上有10个点,编号为0-9,从0点出发,每步可以顺时针到下一个点,也可以逆时针到上一个点,求:经过n步又回到0点有多少种不同的走法?举例:如果n = 1,则从0出发只能到1或者9,不可能回到0,共0种走法如果n = 2,则从0出发有4条路径:0->1->2, 0->1->0, 0->9->8, 0->9->0,其中有两条回到了0点,故一共有2种走法...原创 2020-12-21 22:52:51 · 176 阅读 · 0 评论 -
名企中等——丢棋子的次数
https://www.nowcoder.com/practice/d1418aaa147a4cb394c3c3efc4302266?tpId=117&&tqId=35279&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking题目描述一座大楼有N层,地面算作第0层,最高的一层为第N 层。已知棋子从第0层掉落肯定不会摔碎,从第i层掉落可能会摔碎,也可能不会摔碎。给定整数N作为楼层数,再给定原创 2020-12-20 22:57:56 · 218 阅读 · 0 评论 -
名企中等——最长回文子串
https://leetcode-cn.com/problems/longest-palindromic-substring/submissions/给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-p原创 2020-12-20 15:47:25 · 200 阅读 · 1 评论 -
名企中等——最长回文子串的长度
https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af?tpId=117&&tqId=35044&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking题目描述对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。给定字符串A以及它的长度n,请返回最长回文子串的长度。示例1输入“abc123432原创 2020-12-20 15:25:18 · 182 阅读 · 1 评论 -
名企入门难度——反转字符串
https://www.nowcoder.com/practice/c3a6afee325e472386a1c4eb1ef987f3?tpId=117&&tqId=35028&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking题目描述写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)示例1输入“abcd”返回值“dcba”最简单思路:原创 2020-12-20 12:38:31 · 126 阅读 · 1 评论 -
牛客——最长递增子序列
https://www.nowcoder.com/practice/9cf027bf54714ad889d4f30ff0ae5481?tpId=117&&tqId=35013&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking题目描述给定数组arr,设长度为n,输出arr的最长递增子序列。(如果有多个答案,请输出其中字典序最小的)示例1输入[2,1,5,3,6,4,8,9,7]返原创 2020-12-19 23:01:00 · 232 阅读 · 1 评论 -
leetcode——最长递增子序列的个数
https://leetcode-cn.com/problems/number-of-longest-increasing-subsequence/给定一个未排序的整数数组,找到最长递增子序列的个数。示例 1:输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。示例 2:输入: [2,2,2,2,2] 输出: 5 解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。注意: 给定的数组长原创 2020-12-18 00:30:32 · 151 阅读 · 0 评论 -
剑指 Offer 63. 股票的最大利润
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。限制:0 <= 数组长度 <原创 2020-12-16 00:02:35 · 85 阅读 · 0 评论 -
剑指 Offer 68 - II. 二叉树的最近公共祖先
https://leetcode-cn.com/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof/给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例原创 2020-12-15 23:04:52 · 97 阅读 · 0 评论 -
剑指offer——礼物的最大价值
https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof/在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入: [ [1,3,1], [1,5,1], [4,2,1] ]输出: 12解释: 路径 1→3→5→2原创 2020-12-13 11:27:10 · 99 阅读 · 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。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)示例1输入8...原创 2019-10-19 16:14:28 · 318 阅读 · 0 评论 -
剑指offer——二维数组的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution { public boolean Find(int target, int [][] array) { if (array == null || array.原创 2017-06-02 11:39:52 · 218 阅读 · 0 评论 -
剑指offer——和为S的两个数字
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测试案例,输出两个数,小的先输出。思路: 因为是排序好的数组,所以能比较方便地遍历。 可以定义两个“指针”,一个指向序列的最小值,一个指向小于S的最大值,然后分别向中间遍历。import java.util.ArrayList;pu原创 2017-06-28 13:18:31 · 241 阅读 · 0 评论 -
剑指offer——和为S的连续正数序列(基本思路)
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续正数序列。原创 2017-06-27 19:24:52 · 253 阅读 · 0 评论 -
剑指offer——数组中只出现一次的数字(好题,熟悉位运算)
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路:原创 2017-06-27 17:07:02 · 255 阅读 · 0 评论 -
【集合类分析】Stack
官方介绍: 继承Vector类,再加了五个方法,实现了Stack的LIFOprotected Object[] elementData; // 底层数据结构protected int elementCount; // 有效的元素数量push方法public E push(E item) { addElement(item); return item; }pu原创 2017-06-16 22:24:23 · 222 阅读 · 0 评论 -
剑指offer——二叉树的深度(虽然都是递归,但递归也有不同的写法,or循环)
题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路: 给的入口是一个二叉树的根节点,所以应该是深度优先遍历,然后不断更新最大深度。(?)掌握递归和普通循环的写法。递归:public class Solution { int max = 0; public int TreeDepth(TreeNod原创 2017-06-26 16:07:48 · 226 阅读 · 0 评论 -
剑指——数字在排序数组中出现的次数(复习二分)
题目描述 统计一个数字在排序数组中出现的次数。思路: 首先,这已经是一个排序了的数组,所以,应该就是先找到这个数字第一次出现的位置,再及时地break应该就好了吧?public class Solution { public int GetNumberOfK(int [] array , int k) { if(array==null||array.length==0)原创 2017-06-26 14:30:45 · 183 阅读 · 0 评论 -
剑指offer——两个链表的第一个公共结点(给出的方法,都是针对有且只有一个公共节点的方法)
题目描述 输入两个链表,找出它们的第一个公共结点思路: 首先,理解公共节点的定义,应该是两个链表在此汇合成一个链表(?) 所以先到两个链表的终点,从后往前,当某个节点的next节点不一样时,则该节点为公共节点。 如何从后往前遍历?(递归还是栈?)(空间时间复杂度O(m+n))(但假设两个链表可以先结合,再分开呢?怎么破)书中思路:先得到两个链表的大小,如果其中一个链表较短,就先走n步,使得剩原创 2017-06-25 17:14:47 · 290 阅读 · 0 评论 -
剑指offer——数组中的逆序对(复习归并排序)
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述: 题目保证输入的数组中没有的相同的数字 数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%原创 2017-06-25 15:41:54 · 208 阅读 · 0 评论 -
剑指offer——第一个只出现一次的字符(思路很基础,但有个方法比较巧妙)
题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置思路: 首先,题目不仅要求返回的是第一个满足要求的字符同时还要返回这个字符所在的位置。只想到常规思路。最坏情况O(n^2)的算法,但是过了。说明位运算真的很快? public int FirstNotRepeatingChar(String str) { if(s原创 2017-06-23 17:26:07 · 195 阅读 · 0 评论 -
剑指offer——丑数(好题,思路)
题目描述 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路: 似乎只能一个个判过去。 判断是否为丑数的时候,求因子时循环停止的条件是到平方根为止。(这么做会超时)而且题目中应该指的是仅有质数因子2,3,5!所以8也是丑数利用动态规划求解。如果用普通思路的判断方法原创 2017-06-23 16:03:15 · 372 阅读 · 0 评论 -
剑指offer——左旋转字符串(旋转的思想)
题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!思路: 首先,肯定不能用已经封装好的方法,所以我的思路是新建一个char数组,左移n位,就相当于把原创 2017-06-28 14:06:19 · 254 阅读 · 0 评论 -
剑指offer——翻转单词顺序列(和上题一样的思路,注意空格分界)
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路: 延续之前的rev原创 2017-06-29 14:49:16 · 294 阅读 · 0 评论 -
剑指offer——树的镜像(基础,同样是考察遍历树的循环或递归)
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10原创 2017-06-15 19:11:39 · 143 阅读 · 0 评论 -
剑指offer——反转链表
面16题目描述 输入一个链表,反转链表后,输出链表的所有元素。思路: 一开始想到用递归做,因为递归的代码更加简洁(但我一开始没想出来好的递归方法,所以先用了普通的循环…),主要还是考虑一些边界的情况。 public ListNode ReverseList(ListNode head) { if(head==null) return null;原创 2017-06-13 13:24:32 · 197 阅读 · 0 评论 -
剑指offer——旋转数组的最小数字(二分法思路)
书中第8题 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。自己的思路: 虽然看着是排序的题目,但并不是排序的思想。由于原数组的特点是非递减,所以最小的元素原创 2017-06-08 20:33:15 · 353 阅读 · 0 评论 -
剑指offer——重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:首先从前序和中序遍历的规则出发,可以知道前序的第一个值一定是根节点,而中序时,根节点位于数组的中间。找到中序中根节点所在的位置后,其左边为根的左子树原创 2017-06-06 13:24:23 · 181 阅读 · 0 评论 -
剑指offer——替换空格
书中第三题 题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:主要问题在于复杂度,从前往后进行空格寻找并替换,复杂度更高,因为字符移动的次数更多。 从后往前,字符移动的次数更少,复杂度更低。 以及不要产生过多的对象。public class Solution { p原创 2017-06-04 21:21:54 · 215 阅读 · 0 评论 -
剑指offer——构建乘积数组(注意优化思路)
题目描述 给定一个数组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]。不能使用除法。思路: 题目要求不能使用除法,所以只能在乘法的基础上做些改动。 思路是额外维护两个数组,一个数组C存储从前往后乘的值,一个数组D存储从后往前乘的值。 最后,B[i] = C[i-1]*D[i+1](首尾元素原创 2017-07-02 14:53:12 · 192 阅读 · 0 评论 -
剑指offer——字符串转数字(奥妙各种)(没有考虑科学计数法的情况)(好题)
题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空输出描述: 如果是合法的数值表达则返回该数字,否则返回0 示例1 输入+2147483647 1a33输出2147483647 0思路: 把String变成charArray,然后挨个对ch原创 2017-07-01 15:15:19 · 223 阅读 · 0 评论 -
剑指offer——非常规法求1+2+3+...+n(短路性质,好题)
题目描述 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。思路: 还剩下可以使用的有位运算和加减法 没有思路 发现位运算还是不可能实现! 其实应该想到要用递归的!其实只要先看我们手里有什么牌就能一步一步想到利用短路特性了 我们手里现在可以使用(按优先级高低)单目运算符:++和–,双目运算符:+,-,原创 2017-06-30 17:02:01 · 268 阅读 · 0 评论 -
剑指offer——孩子们的游戏(圆圈中最后剩下的数)(n种解法比较)
题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数….这样下去….直到剩下最原创 2017-06-30 16:19:29 · 424 阅读 · 0 评论