算法
鯉鱼
妹妹你大胆地往前走呀
展开
-
替换空格
题目描述:请实现一个函数,把字符串中的每个空格替换成"%20"。你可以假定输入字符串的长度最大是1000。注意输出字符串的长度可能大于1000。样例:输入:“We are happy.”输出:“We%20are%20happy.”分析:如果每次遇到空格就对后续字符后移,这样执行效率会很低。我们可以先对字符串进行一次遍历,统计空格出现的次数,因此可以计算出替换之后字符串的长度。即n...原创 2019-05-18 22:23:55 · 86 阅读 · 0 评论 -
从尾到头打印链表
在不允许改变链表结构的情况下可以考虑用栈存储数据或者用递归的方法处理//递归的方法 ArrayList<Integer> list=new ArrayList<>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { if(listNode!=null) {...原创 2019-05-18 22:33:46 · 124 阅读 · 0 评论 -
从前序与中序遍历序列构造二叉树
题目描述:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。样例:前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]分析:前序遍历中第一个数字总是树根节点的值,查找该值在中序遍历中的位置,然后左侧的元素位于左子树,右侧的元素位于右子树。//执行用时 : 7 ms, 在Construct ...原创 2019-05-18 22:56:02 · 136 阅读 · 0 评论 -
二叉树的下一个节点
题目描述:给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点。注意:如果给定的节点是中序遍历序列的最后一个,则返回空节点;二叉树一定不为空,且给定的节点一定不是空节点;样例:假定二叉树是:[2, 1, 3, null, null, null, null], 给出的是值等于2的节点。则应返回值等于3的节点。解释:该二叉树的结构如下,2的后继节点是3。2/ 1 3...原创 2019-05-18 23:11:05 · 126 阅读 · 0 评论 -
矩阵中的路径
题目描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。注意:输入的路径不为空;所有出现的字符均为大写英文字母;样例:matrix=[ [“A”,“B”,“C”,“E”],[“S”,“F”,“C”...原创 2019-05-14 12:32:28 · 131 阅读 · 0 评论 -
栈和队列
- 用栈实现队列分析:声明两个栈s1和s2,每次push将元素push到s1中,每次pop检查s2是否为空,若不为空直接pop;若s2为空,则检查s1是否为空,如果不为空则将s1的全部元素push到s2中,直到s1为空,然后pop s2的栈顶元素,即s1中最早压入的元素。声明一个栈s,在push元素时,声明一个临时栈,每次push元素时,首先将s中的元素全部push到临时栈中,然后将新元素...原创 2019-05-19 10:16:46 · 156 阅读 · 0 评论 -
旋转数组的最小数字
题目描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。注意数组中可能存在重复的元素。样例:输入: [1,3,5]输出: 1输入: [2,2,2,0,1]输出: 0分析:当含有重复元素时,通过移动位置首先去除左右两边重复的元素;当最左侧元素小于最右侧元素时...原创 2019-05-19 10:44:14 · 132 阅读 · 0 评论 -
搜索旋转排序数组
题目描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。样例:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true输入: nums = [2,5,6,0...原创 2019-05-19 10:59:33 · 122 阅读 · 0 评论 -
数字序列中某一位的数字
题目描述:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数求任意位对应的数字。样例:输入:13输出:1分析:0-9 10个一位数 占了前10位10-99 90个两位数 占了180位100-999 900个三位数 占了2700位以找序列的第1001位是什么为...原创 2019-05-19 12:07:01 · 378 阅读 · 0 评论 -
机器人的运动范围
题目描述地上有一个 m 行和 n 列的方格,横纵坐标范围分别是 0∼m−1 和 0∼n−1。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格。但是不能进入行坐标和列坐标的数位之和大于 k 的格子。请问该机器人能够达到多少个格子?样例输入:k=7, m=4, n=5 输出:20输入:k=18, m=40, n=40 输出:1484解释:当k为18时,机器人...原创 2019-05-14 15:26:14 · 94 阅读 · 0 评论 -
剪绳子
题目描述:给你一根长度为 n 绳子,请把绳子剪成 m 段(m、n 都是整数,2≤n≤58 并且 m≥2)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]k[1] … k[m] 可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。样例:输入:8输出:18分析:如何把长度为n的绳子剪成若干段,使得各段的乘积最大。...原创 2019-05-14 20:56:53 · 111 阅读 · 0 评论 -
把数组排成最小的数
题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组[3, 32, 321],则打印出这3个数字能排成的最小数字321323。样例:输入:[3, 32, 321]输出:321323注意:输出数字的格式为字符串。分析:对数组重新进行排序,依据以下规则:若ab > ba 则 a > b,将a和b的位置交换若...原创 2019-05-20 09:00:55 · 147 阅读 · 0 评论 -
二进制中1的个数
题目描述:输入一个32位整数,输出该数二进制表示中1的个数。注意:负数在计算机中用其绝对值的补码来表示。样例1 输入:9 输出:2解释:9的二进制表示是1001,一共有2个1。样例2 输入:-2 输出:31解释:-2在计算机里会被表示成11111111111111111111111111111110, 一共有31个1。分析:先判断整数二进制表示中最右边一位是不是1,然后右移一位,原...原创 2019-05-14 22:10:43 · 457 阅读 · 0 评论 -
x的n次幂
题目描述:实现 pow(x, n) ,即计算 x 的 n 次幂函数。样例:输入: 2.00000, 10输出: 1024.00000说明:-100.0 < x < 100.0n 是 32 位有符号整数,其数值范围是 [-2147483648, 2147483647] 。分析:计算x 的 n 次幂:如果采用常规解法循环n次对想相乘,当x=0.000001,n=21474...原创 2019-05-15 08:31:40 · 2644 阅读 · 0 评论 -
删除链表中的节点
题目描述:请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。样例:输入: head = [4,5,1,9], node = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.说明:链表至少包含两个节点。链表中所有节点的值都是唯一的。给定的节点为非末...原创 2019-05-15 09:13:09 · 717 阅读 · 0 评论 -
把数字翻译成字符串
题目描述:给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成”a”,1翻译成”b”,……,11翻译成”l”,……,25翻译成”z”。一个数字可能有多个翻译。例如12258有5种不同的翻译,它们分别是”bccfi”、”bwfi”、”bczi”、”mcfi”和”mzi”。请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。样例:输入:“12258”输出:5分析:首先考虑特殊情...原创 2019-05-20 11:49:32 · 202 阅读 · 0 评论 -
解码方法
题目描述:一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。样例:输入: “226”输出: 3解释: 它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。输入: “026”输出: 0分析:这道题和...原创 2019-05-20 12:22:29 · 553 阅读 · 0 评论 -
礼物的最大价值
题目描述:在一个m×n(m,n>0)的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?样例:输入:[[2,3,1],[1,7,1],[4,6,1]]输出:19解释:沿着路径 2→3→7→6→1 可以得到拿到...原创 2019-05-20 12:45:25 · 130 阅读 · 0 评论 -
删除链表中重复的元素
题目描述:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。样例:输入: 1->2->3->3->4->4->5输出: 1->2->5分析:从头结点开始遍历该链表,如果当前结点的值与下一个节点的值相同,那么他们就是重复的节点,都要被删除。因此为了使删除重复节点之后的链表仍然相连,我们要把该节点的上一个节...原创 2019-05-15 11:03:01 · 3175 阅读 · 1 评论 -
无重复字符的最长子串
题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。样例:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。分析:声明一个变...原创 2019-05-20 15:15:57 · 467 阅读 · 0 评论 -
丑数
题目描述:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。求第n个丑数的值。样例:输入:5输出:5分析:一个数m是另一个数n的因子,是指n能被m整除,即n%m=0。根据丑树的定义,丑树只能被2、3和5整除。也就是说如果一个数能被2整除,就连续除以2;如果能被3整除,就连续除以3;如果能被5整除就连续除以5,如果最后...原创 2019-05-20 16:55:17 · 182 阅读 · 0 评论 -
字符串中的第一个唯一字符
题目描述:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。样例:s = “leetcode”返回 0.s = “loveleetcode”,返回 2.分析:建立哈希表存储每个字符以及字符对应的索引,并将该字符加入列表中。在遍历字符时首先判断该字符是否已经存在于哈希表,如果存在则将其从列表中移除;如果不存在则添加。直到最后如果列表不为空的话那么列...原创 2019-05-20 17:17:24 · 613 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。样例:输入:[1,2,3,4,5]输出:[1,3,5,2,4]分析:如果没有规定奇数和奇数,偶数和偶数之间的相对位置不改变,可以定义两个指针,一个指向数组中的第一个元素,另一个指向数组中最后一个元素。在两个指针...原创 2019-05-15 16:31:21 · 121 阅读 · 0 评论 -
数组中的逆序对
题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,size<=...原创 2019-05-20 20:21:12 · 176 阅读 · 0 评论 -
两个链表的第一个公共结点
题目描述:输入两个链表,找出它们的第一个公共结点。当不存在公共节点时,返回空节点。样例:相交节点为8。分析:如果两个链表有公共节点,那么第一个公共节点之后的节点两个链表完全相同,所以不同的部分仅在公共节点之前。首先遍历两个链表得到两个链表的长度,在第二次遍历时,首先在较长的链表上先走若干步(长度差),接着同时在两个链表上遍历,找到的第一个相同的节点就是他们的第一个公共节点。//执行用...原创 2019-05-20 20:42:57 · 155 阅读 · 0 评论 -
数字在排序数组中出现的次数
题目描述:统计一个数字在排序数组中出现的次数。例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5]和数字3,由于3在这个数组中出现了4次,因此输出4。样例:输入:[1, 2, 3, 3, 3, 3, 4, 5] , 3输出:4分析:因为是在经过排序的数组中查找,所以首先想到用二分查找,找到该数字在数组中第一次出现的位置以及最后一次出现的位置,二者做差加1即为出现的次数。...原创 2019-05-20 22:18:24 · 217 阅读 · 0 评论 -
删除链表的倒数第N个节点
题目描述:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。样例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.分析:如何只遍历链表一次就能找到倒数第n个节点。定义两个指针p1和p2分别指向头结点,首先让p1开始遍历,p2保持不动,当p1走到第k个节点时...原创 2019-05-15 19:01:10 · 113 阅读 · 0 评论 -
链表中环的入口节点
题目描述:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。样例:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1...原创 2019-05-15 21:24:05 · 230 阅读 · 0 评论 -
反转链表
声明一个节点pre初始化为null,声明next节点保存当前结点的next节点,然后令当前结点的next节点指向pre,再将当前结点赋给pre,最后将next节点赋给当前节点,直到当前结点为空遍历结束,返回pre节点。public ListNode reverseList(ListNode head) { if(head==null||head.next==null) ...原创 2019-05-15 21:57:16 · 99 阅读 · 0 评论 -
0到n-1中缺失的数字
题目描述:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。样例:输入:[0,1,2,4]输出:3分析:长度为n-1的数组,数字范围在0到n-1,即n个数字存放到长度为n-1的数组中,那么肯定有一个元素不在数组中(当所有数字只出现一次的情况下)。因为数组是递增有序的所以使...原创 2019-05-21 09:49:57 · 905 阅读 · 0 评论 -
数组中数值和下标相等的元素
题目描述:假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组[-3, -1, 1, 3, 5]中,数字3和它的下标相等。样例:输入:[-3, -1, 1, 3, 5]输出:3注意:如果不存在,则返回-1。分析:首先想到的方法是对数组从头遍历,当遍历到一个元素和其下标相等时直接返回,如果遍历结束仍没有找到则返回...原创 2019-05-21 10:34:51 · 846 阅读 · 0 评论 -
合并两个有序的链表
题目描述:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。样例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1==nul...原创 2019-05-15 22:12:02 · 97 阅读 · 0 评论 -
合并K个排序的链表
题目描述:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。样例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6分析:采用分治法,将k个链表平均拆分成两组,分别进行对同一组内的合并,最终组间再合并。public ListNode...原创 2019-05-15 22:47:22 · 99 阅读 · 0 评论 -
另一个树的子树
题目描述:给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。样例:ts返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。ts返回 false。分析:首先判断s的根节点是否和t相同,如果相同则继续判断根节点的左右子树和t的左右子树是否相同,直...原创 2019-05-16 08:18:15 · 132 阅读 · 0 评论 -
对称的二叉树
题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的样例:如下图所示二叉树[1,2,2,3,4,4,3,null,null,null,null,null,null,null,null]为对称二叉树:如下图所示二叉树[1,2,2,null,4,4,3,null,null,null,null,null,null]不是对称二叉树:分析:...原创 2019-05-16 09:15:09 · 119 阅读 · 0 评论 -
顺时针打印矩阵
题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。样例:输入:[[1, 2, 3, 4],[5, 6, 7, 8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]分析:该问题没有涉及到复杂的数据结构或者算法,但需要非常注意边界条件的判断。如果矩阵为空或者矩阵行数为0返回空。定义四个边界:上边界初始化为矩阵第...原创 2019-05-16 10:23:22 · 129 阅读 · 0 评论 -
数组中只出现一次的两个数字
与运算:有0则0。或运算:有1则1。与或运算:相同为0,相异为1。题目描述:给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。样例:输入: [1,2,1,3,2,5]输出: [3,5]分析:异或运算的性质:任何一个数字异或它自己都等于0。首先考虑如果数组中只有一个元素出现一次,其余元素均出现了两次。我们从头到尾依次异...原创 2019-05-21 12:37:17 · 859 阅读 · 0 评论 -
最小栈
题目描述:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。样例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(...原创 2019-05-16 10:43:01 · 145 阅读 · 0 评论 -
验证栈序列
题目描述:给定 pushed 和 popped 两个序列,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。样例:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), push...原创 2019-05-16 11:16:55 · 577 阅读 · 0 评论 -
二叉树的层次遍历
非递归做法:利用队列存储节点。首先将根节点加入到队列中。接下来每次从队列中取出头结点,遍历这个节点之后把它能到达的节点依次加入到队列中。重复这个遍历过程直到队列中的节点全部被遍历为止。//执行用时 : 2 ms, 在Binary Tree Level Order Traversal的Java提交中击败了84.88% 的用户//内存消耗 : 36.3 MB, 在Binary Tree Leve...原创 2019-05-16 12:00:36 · 139 阅读 · 0 评论