
数据结构与算法
zjf1165
这个作者很懒,什么都没留下…
展开
-
围棋棋盘有多少正方形
说明这个系列的算法题是看了七月算法视频后的总结题目:围棋棋盘由19*19条线组成,这些线公组成了多少个正方形思路:从正方形的定义可知,正方形的长和宽相等,因此对于围棋棋盘中盘中求正方形个数的问题而言,只要求的正方形的长和宽均为:1,2,3 …… 19的正方形个数,然后求和即可代码:/** * 围棋棋盘由19*19条线组成,这些线公组成了多少个正方形 */public class 围棋棋盘有多少原创 2016-07-15 20:13:02 · 3147 阅读 · 1 评论 -
求最大子数组之和
题目在一个有N个元素的数组中,其中每个元素的值可正可负,在该数组中求一个连续子数组,使得该数组的和最大思路拿到这个题首先想到的是暴力法,即暴力循环求所有数组的和,因此可以求的该数组的最大值,其时间复杂度为O(N^3) 时间复杂度较高,我们可以用分治法和动态规划来做这道题。其中分治法时间复杂度为O(N*logN),而动态规划为O(N)。代码 暴力法:private static void f1原创 2016-08-11 11:48:01 · 304 阅读 · 0 评论 -
火车进站-即数的全排列问题
题目给定一个正整数N代表火车数量,其中n大于0且小于10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号。要求以字典序排序输出火车出站的序列号。思路这道题考的是给定n个无重复的数,求这n个数的全排列问题代码public class F { public static void main(String[] args) { // 无重复的全排列 S原创 2016-08-10 21:28:30 · 2093 阅读 · 2 评论 -
求两个大数的和
题目给定两个50到100位长的数,求这两个数的和思路在java中long类型为8字节,即64位,因此不能用Long类型变量去承载并计算这两个数,只能考虑用数组或者字符串来计算代码import java.util.Scanner;import java.util.Stack;//本题使用的是String+Stack求解的,用数组效率更高点,因为栈的进栈和出栈浪费不少时间public class原创 2016-08-10 21:14:02 · 802 阅读 · 0 评论 -
数独-java版
求数独问题依然利用图的深度优先搜索算法求解直接上代码:public class 数独 { public static void main(String[] args) { String[][] map = { { "5", "3", " ", " ", "7", " ", " ", " ", " " }, { "6", " ",原创 2016-08-10 21:06:23 · 744 阅读 · 0 评论 -
找零钱问题-图的深度优先
题目这是今年华为校招的一道测试题,题目为: 我们知道人民币有1、2、5、10、20、50、100这几种面值。现在给你n(1≤n≤250)元,让你计算换成用上面这些面额表示且总数不超过100张,共有几种。比如4元,能用4张1元、2张1元和1张2元、2张2元,三种表示方法。思路根据{1、2、5、10、20、50、100}构建一张 n行7列的图,利用图的深度优先收索算法求解。代码:import jav原创 2016-08-10 19:52:08 · 490 阅读 · 0 评论 -
n皇后问题-java版
题目对于一个n*n的棋盘,给定n个皇后,求每个皇后的位置,其中要求每个皇后在八个方向上是唯一存在的思路对n*n的棋盘使用图的深度优先收索求解,注意剪枝代码import java.util.ArrayList;/** * 对于一个n*n的棋盘,给定n个皇后,求每个皇后的位置,其中要求每个皇后在八个方向上是唯一存在的 */public class n皇后 { public static v原创 2016-08-10 20:47:42 · 567 阅读 · 0 评论 -
Java版 原地二路归并排序
二路归并排序原始二路归并排序思想: 先将原始数组划分为n个较小的子数组,然后对每个子数组两两进行排序并合并为一个次子数组 重复上述过程直到次子数组的个数为1即为排序后的原始数组时间复杂度:O(N*logN) (最好/坏情况)空间复杂度: O(N)原地二路归并排序为了解决原始二路归并排序空间复杂度较高的情况而产生的,思想很巧妙,很是佩服。它在将原始的空间复杂度由 O(N) 变为 O(1).原创 2016-07-27 17:14:21 · 885 阅读 · 1 评论 -
KMP算法-Next数组递归求法
/** * KMP算法:算法功能:在一个字符串s中,找到第一个与给定的字符串t想匹配的位置 */public class KMP { public static void main(String[] args) { String[] s = new String[] { "a", "b", "c", "a", "b", "a", "b", "c", "a" };// 主串原创 2016-07-16 17:29:43 · 1494 阅读 · 0 评论 -
最大连续子数组
题目:对于一个给定的数组A,求 A中连续子数组,使得该数组的和最大 例如: A:1, -2, 3, 10, -4, 7, 2, -5 结果:3 10 -4 7 2方法: 暴力法 — 遍历求A的所有子数组,求和最大的 分治法: 数组的和最大那个数组只会出现在以下三种情况中: a. 存在于数组下标从0到mid中,其中mid为数组长度(le原创 2016-07-15 20:50:38 · 511 阅读 · 0 评论 -
零子数组
题目:长度为N的数组A中子数组和最接近0的子数组。思路:对于一个数组A,其子数组和最接近0只会出现在两种情况中:数组下标从0到i (i代码:public class 零子数组 { public static void main(String[] args) { int[] array = { 1, -2, 3, 10, -4, 7, 2, -5 }; //原创 2016-07-15 20:30:45 · 1129 阅读 · 2 评论 -
输入一个正整数N,返回一个大于N并且二进制权重跟N相同的数
背景该题目来源于今天的网易校招笔试,其中二进制权重为一个正整数N的二进制中1的个数思路假设M为N的二进制,则从M的最后一位开始向前遍历,遇到第一个1改为0,继续遍历遇到第一个0改为1结束。代码public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.i原创 2016-09-23 21:09:28 · 1056 阅读 · 0 评论