算法
开发小牛进阶
Java小白,公众号同名。
展开
-
LeetCode(13):罗马数字转整数
描述:罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并...原创 2020-03-28 14:51:20 · 279 阅读 · 0 评论 -
LeetCode(9):回文数
描述判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例输入: 121* 输出: true** 输入: -121* 输出: false* 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。** 输入: 10* 输出: false* 解释: 从右向左读, 为 01 。因此它不是一个回...原创 2020-03-25 20:46:37 · 218 阅读 · 0 评论 -
LeetCode(7):整数反转
描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例:输入: 123 输出: 321输入: -123 输出: -321输入: 120 输出: 21class Solution { public int reverse(int x) { long n = 0; wh...原创 2020-03-24 21:30:19 · 155 阅读 · 0 评论 -
LeetCode(1):两数之和
描述:给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例: 给定 nums = [2, 7, 11, 15],target = 9因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]...原创 2020-03-23 21:38:47 · 166 阅读 · 0 评论 -
leetcode:给定一棵二叉树 找到它的最小深度 最小深度是从根节点到最近叶节点的最短路径上的节点数量
题目:给定二叉树,找到它的最小深度。The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.最小深度是沿从根节点到最近的叶节点的最短路径上的节点数。Note:A leaf is a node with no c...原创 2018-10-14 19:15:27 · 1230 阅读 · 0 评论 -
《剑指offer:Java版》 输入一个链表,按链表从尾到头的顺序返回一个ArrayList
描述:输入一个链表,按链表从尾到头的顺序返回一个ArrayList实现:package com.ma.offer;import java.util.ArrayList;import java.util.Stack;/** * 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 */class ListNode { int val; Lis...原创 2020-03-14 16:43:40 · 212 阅读 · 0 评论 -
《剑指offer:Java版》 请实现一个函数,将一个字符串中的每个空格替换
描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。实现:package com.ma.offer;public class Demo02 { /** * 请实现一个函数,将一个字符串中的每个空格替换成“%20”。 * 例如,当字符串为We ...原创 2020-03-13 22:15:53 · 380 阅读 · 0 评论 -
《程序员代码面试指南》字符串的统计字符串
题目:给定一个字符串str,返回str的统计字符串。例如:‘’aaabbadddffc‘’的统计字符串为‘’a_3_b_2_a_1_d_3_f_2_c_1‘’。 解答:1.如果str为空,那么统计字符串不存在。 2.如果str不为空。首先生成String类型的变量res,表示统计字符串,还有整型变量num,代表当前字符的数量。初始时字符串只包含第0个字符(str[0]),同...原创 2018-10-02 16:23:24 · 250 阅读 · 0 评论 -
《程序员代码面试指南》判断两个字符串是否互为变形词
题目:给定两个字符串 str1 和 str2,如果你str1 和 str2 中出现的字符种类一样且每种字符出现的次数也一样,那么str1 和 str2 互为变形词。请实现函数判断两个字符串是否互为变形词。 举例:str1 = “123”,str2 =“321” 返回“true”str1 = “123”,str2 =“2331” 返回“false” 解答:如果字符串 ...原创 2018-09-05 19:56:29 · 238 阅读 · 0 评论 -
《程序员代码面试指南》判断字符数组中是否所有字符都只出现一次
题目:给定一个字符类型的数组chas[],判断chas中是否所有的字符都只出现一次。 举例:chas=[‘a’,‘b’,‘c’],返回true;chas=[‘1’,‘2’,‘1’],返回false。 解答:遍历一遍chas,用map记录每种字符出现的情况,这样在遍历的时候发现重复字符的情况,map可以用固定长度的数组实现。 public class IsU...原创 2018-10-03 11:32:50 · 312 阅读 · 0 评论 -
《程序员代码面试指南》给定一个链表的头结点head 请判断该链表是否为回文结构
题目:给定一个链表的头结点head,请判断该链表是否为回文结构。例如:1->2->1,返回true。1->2->2->,1返回true。15->6->15,返回true。1-2->3,返回false。解答:利用栈结构,从左到右遍历链表,遍历的过程中把每个节点依次压入栈中。因为栈是先进后出的,所以遍历完成后从栈顶到栈的节点值顺序会与原...原创 2018-09-27 01:45:37 · 870 阅读 · 0 评论 -
《程序员代码面试指南》求两个字符串最长公共子串
题目: 给定两个字符串 str1 和 str2,返回两个字符串的最长公共子串。 举例: str1 = "1AB2345CD",str2 = "12345EF",返回"2345"。 解答: 经典动态规划的方法可以做到时间复杂度为O(M*N),额外空间复杂度为O(M*N)。 首先需要生成动态规划表。生成大小为M*N的矩阵dp,行数为M,列数为N。dp[i][j]的含义是: ...原创 2018-09-22 21:09:43 · 593 阅读 · 0 评论 -
《程序员代码面试指南》字符串之数字子串求和
题目:给定一个字符串str,求其全部数字串所代表的数字之和要求:1.忽略小数点字符,例如"A1.3",其中包含数字1和3。 2.如果紧贴数字子串左边出现字符"-",当连续出现的数量为奇数时,则数字视为负,连续出现视为数量为偶数时,则数字 视为正。例如:"A-1BC--12",其中包含数字为-1和12。 举例: str = "A1CD2E33",返回36。 str = "A-1B"-2C--D...原创 2018-09-27 22:26:31 · 224 阅读 · 0 评论 -
《程序员代码面试指南》在有序但含有空的数组中查找字符串
题目:给定一个字符串数组strs[],在strs中有些位置为null,但在不为null的位置上,其字符串是按照字典顺序有小到大依次出现的。再给定一个字符串str返回str在strs中出现的最左的位置。 举例:strs=[null,"a",null,"a",null,"b",null,"c"],str="a",返回1。strs=[nulll,"a",null,&quo原创 2018-10-06 11:47:20 · 353 阅读 · 0 评论 -
《剑指offer:Java版》按之字形顺序打印二叉树
题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路解析:需要两个栈来辅助输出之字形的二叉树的结点值。 单数栈是单数行的输出,在出栈的过程中,需要把出栈结点的左右子树放入双数栈中,先左后右,这样输出就是从后向前了 双数栈是双数行的输出,在出栈的过程中,需要把出栈结点的左右...原创 2018-09-29 00:47:09 · 148 阅读 · 0 评论 -
《程序员代码面试指南》判断字符串a和字符串b 是否互为旋转词
题目:如果一个字符串str,把字符串str前面任意的部分挪到后面形成的字符串叫做str的旋转词。比如str="12345"、"23451"、"34512"、和"51234"。给定两个字符串a和b,请判断a和b是否互为旋转词。举例:a="cdab",b="abcd",返回true。a="1ab2",b="ab12",返回false。a原创 2018-09-29 22:28:56 · 340 阅读 · 0 评论 -
《程序员代码面试指南》给定一个字符串 返回最长无重复子串的长度
题目:给定一个字符串 str,返回 str 最长无重复子串的长度。举例:str = "abcd" 返回 4str = "aabcb",最长无重复子串为"abc",返回3。解答:如果 str 长度为 N,字符编码范围是M,本题可以做到时间复杂度为O(N),额外空间复杂度为O(M)。1.在遍历str之前,先申请几个变量。哈希表 map,key表示某个字符,value为这个字符第一次出现的位...原创 2018-09-23 14:49:27 · 1338 阅读 · 2 评论 -
《程序员代码面试指南》在单链表中删除指定值的节点
题目:在单链表中删除指定值的节点 方法一:利用一个栈结构。 class Node{ Integer value; public Node next; public Node(Integer data){ this .value = da...原创 2018-09-05 19:21:51 · 266 阅读 · 0 评论 -
《程序员代码面试指南》 分别用递归和非递归实现二叉树的先序、中序和后序遍历
题目 用递归和非递归的方式,分别按照二叉树先序、中序和后序打印所有的节点。我们约定:先序遍历顺序为根、左、右;中序遍历顺序为左、根、右;后序遍历顺序为左、右、根。 解答 用递归实现三种遍历是最基本的内容 先序遍历的递归实现 /** * 二叉树先序递归遍历 */ public class Node{ ...原创 2018-09-02 00:24:25 · 411 阅读 · 0 评论 -
《程序员代码面试指南》环形单链表的约瑟夫问题
描述:据说著名历史学家 Josephus 有过以下问题:在罗马人占领乔塔帕特后,39 个犹太人与 Josephus 及他的朋友躲到一个洞里面, 39 个犹太人决定宁死也不愿被敌人抓到,于是他们决定了一个自杀的方式,41 个人排成一个圈,由第一个人开始报数,报到 3 的人自杀,然后剩下的人再依次报数,报到三的人自杀,最后剩一个人可以选择自己的命运。这就是著名的约瑟夫问题。现在用环形单链表实现这个自杀...原创 2018-06-02 20:25:04 · 264 阅读 · 0 评论 -
《剑指offer:Java版》 用两个栈实现队列
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。x/* * 用两个栈实现队列 * 入栈给stack1,出栈时,若stack2不为空,则出栈, * 若为空,把stack1的内容全部放入stack2,然后出栈。 */public class Main { Stack<Integer> stack1 = new Stack&...原创 2018-05-27 00:15:21 · 220 阅读 · 0 评论 -
《程序员代码面试指南》用一个栈实现另一个栈的排序
题目: 一个栈中元素类型为整形,现在使用另外一个栈完成对该栈元素的排序,从栈顶到栈底从大到小。解决 思路: 将要排序的栈记作 stack ,申请的辅助栈为 help 。在 stack 上执行 pop 操作 ,弹出的元素记作 cur 。 如果 cur 小于或等于 help 栈顶的元素,则将 cur 直接压入 help; 如果 cur 大于 help栈顶的元...原创 2018-05-27 17:53:57 · 314 阅读 · 0 评论 -
《程序员代码面试指南》打印两个有序链表的公共部分
题目: 给定两个有序链表的头指针 head1 和 head2,打印两个两个链表的公共部分。解决思路: 从两个链表的头结点开始移动; 如果 head1 的值小于 head2,则 head1 往下移动。 如果 head2 的值小于 head1,则 head2 往下移动。 head1 或 head2 有任何一个移动到 null,结束。publi...原创 2018-05-27 19:45:55 · 268 阅读 · 0 评论 -
《剑指offer》 旋转数组的最小元素
题目描述:把一数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组的大小为0,请返回0.public class Main { /* * 传入旋转...原创 2018-05-28 09:28:03 · 128 阅读 · 0 评论 -
《剑指offer:Java版》 二维数组中的查找
题目描述:在一个二维数组中,每一个行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 1 2 8 9 2 4 8 12 4...原创 2018-05-24 10:23:57 · 155 阅读 · 0 评论 -
《程序员代码面试指南》删除链表中间节点和a/b处的节点
题目: 给定链表的头节点 head ,实现删除链表的中间节点的函数。例如: 不删除任何节点; 1 -> 2,删除节点1; 1 -> 2 ->3, 删除节点2; 1 -> 2 ->3 -> 4, 删除节点2; 1 -> 2 ->3 -> 4-> 5,删除节点3; 1 ...原创 2018-05-28 23:50:31 · 142 阅读 · 0 评论 -
《程序员代码面试指南》两个单链表生成相加链表
题目:假设链表中每一个节点的值0~9之间,那么链表整体就可以代表一个整数。 例如:9->3->7,可以代表整数937。给定两个这种链表的头节点 head1 和 head2,请生成代表两个整数相加值的结果链表。例如:链表 1 :9->3->7,链表 2 :6->3,最后生成的结果链表为 1->0->0->0。 方法:1、将两...原创 2018-06-05 20:15:09 · 701 阅读 · 0 评论 -
《程序员代码面试指南》合并两个有序的单链表
题目:给定两个有序单链表头节点 head1 和 head2 请合并两个有序链表,合并后依然有序,并返回合并后的头节点。例如:0->2->3->7->null1->3->5->7->9->null合并后的链表为:0->1->2->3->3->5->7->7-&g原创 2018-06-14 08:48:39 · 318 阅读 · 0 评论 -
《程序员代码面试指南》反转单向链表
题目: 实现单向链表的反转要求:如果链表的长度为 N 时间复杂度要求为 O(N),额外空间复杂度为 O(1)。public class Node{ public int value; public Node next; public Node(int data){ ...原创 2018-06-01 16:44:27 · 206 阅读 · 0 评论 -
《剑指offer:Java版》 斐波那契数列
*题目:跳台阶题目描述: 一只青蛙一次可以跳一级台阶也可以跳上两级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 (斐波那契数列)public class Solution91 { public int finbonacci(int n){ if(n <= 0){ r...原创 2018-06-01 17:09:07 · 138 阅读 · 0 评论 -
《程序员代码面试指南》向有序的环形单链表中插入新节点
题目:一个环形单链表从头节点 head 开始不降序,同时由最后的节点指回头节点。给定这样的一个环形单 链表的头节点 head 和 一个整数 num ,请生成节点值为 num 的新节点,并插入到这个环形链表中,保证调整后的链表依然有序。解答:直接给出时间复杂度为 O(N)、额外空间复杂度为 O(1)的方法。具体过程如下:1、生成节点值为 num 的新节点,记作 node。2、如果...原创 2018-06-11 00:45:22 · 556 阅读 · 0 评论 -
《程序员代码面试指南》按照左右半区的方式重新组合单链表
题目:给定一个单链表的头部节点 head,链表长度为 N,如果 N 为偶数,那么前 N/2 个节点算作左半区,后 N/2 的节点算作右半区;如果 N 为奇数,那么前 N/2 个节点算作左半区,后 N/2 + 1 个节点算作右半区。左半区从左到右依次记为 L1->L2->...,右半区从左到右依次记做 R1->R2->..., 请将链表调整成为 L1->R1->...原创 2018-08-07 23:24:37 · 150 阅读 · 0 评论 -
八大排序总结
文章出处:http://blog.csdn.net/hguisu/article/details/7776068概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速...转载 2018-08-28 15:26:21 · 3026 阅读 · 0 评论 -
《程序员代码面试指南》实现一个有getMin()功能的栈
题目: 实现一个特殊的栈,在实现基本功能的基础上,再实现返回栈中最小元素的操作。描述: 用两个栈,一个栈用来保存当前栈中的元素,其功能和一个正常的栈没有什么区别,记作stackData;另一个栈用来保存每一步的最小值,这个栈记作stackMin。 方法一:压入数据规则: 假设当前数据为 newNum, 现将其压入 stackData。然后判断 ...原创 2018-05-26 15:36:11 · 338 阅读 · 0 评论