随笔分类 - 算法题
一些体现某种数据结构的锻炼思考习惯的算法题。
摘要:题目:判断二分图 问题描述: 给定一个无向图graph,当这个图为二分图时返回true。 如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。 graph将会以邻接表方式给出,graph[i]表示图中与节点i相
阅读全文
摘要:题目:两两交换链表中的节点-递归解法 问题描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 解决思路: 本题使用递归思想解决的步骤如下: 1、我们首先需要确定递归主体以及递归的终止条件:经过分析,本题的递归主体即是相邻
阅读全文
摘要:题目:删除链表的倒数第N个节点 问题描述: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 解决思路: 删除链表的倒数第 n 个节点即是删除链表的顺数第 (size-n+1) 个节点(size为链表的长度),所以我们可以利用快慢指针来解决此问题:先让快指针走 n 步,剩余的即可由
阅读全文
摘要:题目:目标和 问题描述: 给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 解决思路: 直接使用 dfs 进行
阅读全文
摘要:题目:最长回文子串 问题描述: 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 解决思路: 本题可以采用中心扩展算法:顾名思义,由于回文串具有中心对称的性质,所以我们可以根据字符串中的某一个字符开始分别向左向右扩展,直到找到不相等的字符为止,这样得到的字符串
阅读全文
摘要:题目:旋转矩阵 问题描述: 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。 不占用额外内存空间能否做到? 解决思路: 先将图像按照下图中的对角线翻转一下: 然后再按照下图中的Y轴翻转一下即可: 解决代码: class Solution
阅读全文
摘要:题目:每日温度 问题描述: 根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。 例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出
阅读全文
摘要:题目:有效的括号 问题描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 解决思路: 我们可以使用栈来解决这个问题。原因是:在
阅读全文
摘要:题目:对角线遍历 问题描述: 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。 解决思路: 根据上面的图我们可以得到如下信息: 1、遍历的方向有两个:先是"右上"方向,然后是"左下"方向,然后再是"右上"方向,再是"左下"
阅读全文
摘要:题目:鸡蛋掉落 问题描述: 你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。 每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。 你知道存在楼层 F ,满足 0 解决思路: 本题常规的解决思路即是:确定第一个鸡蛋扔下的楼层数,然后根据结果判断接下来的扔鸡蛋策略。
阅读全文
摘要:[toc] 题目一:完美的代价 问题描述: 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。(时间限制:1.0s,内存限制:512.0MB) 交换的定义是:交换两个相邻的字
阅读全文
摘要:[toc] 题目一:矩阵乘法 问题描述: 给定一个N阶矩阵A,输出A的M次幂(M是非负整数)(时间限制:1.0s,内存限制:512.0MB,) 例如: A = 1 2 3 4 A的2次幂 7 10 15 22 输入、输出格式: 第一行是一个正整数N、M(1 arr = new ArrayList()
阅读全文
摘要:[toc] 题目一:分解质因数 问题描述: 求出区间[a,b]中所有整数的质因数分解。(时间限制:1.0s,内存限制:512.0MB,2 1) return false; else return true; } } key import java.util.Scanner; public class
阅读全文
摘要:[toc] 题目一:十六进制转八进制 问题描述: 给定n个十六进制正整数,输出它们对应的八进制数。 输入、输出格式: 输入的第一行为一个正整数n (1二进制 for(int j = 0; j八进制 for(int m = 0; m 实现字符到数字的转化 num = (sb.charAt(m) '0'
阅读全文
摘要:[toc] 题目一:十进制转十六进制 问题描述: 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。 注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。(时间限制:1.0s,内存限制:512.0MB) 解决思路: 使用包装类的parse方法即可轻
阅读全文
摘要:[toc] 题目一:杨辉三角形 问题描述: 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。 下面给出了杨辉三角形的前4行:(时间限制:1.0s,内存限制:256.0MB,1 <= n <= 34) 1 1
阅读全文
摘要:[toc] 题目一:字母图形 问题描述: 利用字母可以组成一些美丽的图形,下面给出了一个例子:(时间限制:1.0s,内存限制:256.0MB,1 i) System.out.println(s2.substring(s2.length() 1 i, 25) + s1.substring(0, m i
阅读全文
摘要:题目一:Fibonacci数列 问题描述: Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 解决思路: 我们可以先写一小段Fibonacci数列来总结规律:1,1,2,3,5,8,13,
阅读全文

浙公网安备 33010602011771号