算法题
za30312
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二维数组打印
题目描述 有一个二维数组(n*n),写程序实现从右上角到左下角沿主对角线方向打印。 给定一个二位数组arr及题目中的参数n,请返回结果数组。 测试样例: [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],4 返回:[4,3,8,2,7,12,1,6,11,16,5,10,15,9,14,13]public int[] arrayPrint(i原创 2017-09-18 20:19:12 · 585 阅读 · 0 评论 -
矩阵连乘(动态规划)
题目描述:给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2 ,…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。例如: A1={30x35} ; A2={35x15} ;A3={15x5} ;A4={5x10} ;A5={10x20} ;A6={20x25} ;最后的结果为:((A1(A2A3))((A4A5)A6)) 最小的原创 2017-11-21 20:15:38 · 829 阅读 · 0 评论 -
部分背包问题(贪心基础)
有n个物体,第i个物体重量为w[i] 价值为v[i]。在总重量不超过C的情况下让总价值尽量高.取一个物品必须全取,价值和重量按比例计算【分析】 贪心策略:优先拿“价值除以重量的值”最大的,重量和小于等于C#include <iostream>#include <algorithm>#include <vector>using namespace std;struct Box {原创 2017-10-16 21:35:15 · 585 阅读 · 0 评论 -
最优装载问题(贪心基础)
最优装载问题。给出n个物体,第i个物体重量为w[i]。选择尽量多的物体,使得总重量不超过C。 【分析】 由于只关心物体的数量,所有装重的没有装轻的划算。只需把所有物体按重量从小到大排序,一次选择每个物体,直到装不下为止。这是一种典型的贪心算法,只顾眼前,但能得到最优解。#include <iostream>using namespace std;//交换 template <clas原创 2017-10-16 19:44:11 · 1051 阅读 · 0 评论 -
循环赛问题(分治)
设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:⑴每个选手必须与其他n-1个选手各赛一次;⑵每个选手一天只能赛一次;⑶循环赛一共进行n-1天。按此要求可将比赛日程表设计-成有n行和n-l列的一个表。在表中第i行和第j列处填入第i个选手在第j天所遇到的选手。分析: 分治策略, 递归地用一分为二的策略对选手进行分割,知道只剩2个选手。 1.初始化第一位选手原创 2017-11-08 19:25:39 · 1773 阅读 · 0 评论 -
活动安排(贪心)
问题:有n个活动的集合A={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。 求解:安排尽量多项活动在该场地进行,即求A的最大相容子集。分析: 1.对活动以结束时间增序排序,使剩余可安排时间最大化,以便安排更多的相容活动。 2.遍历排好序的活动,结束时间与下个活动的开始时间进行比较,不相容则继续遍历package 算法实原创 2017-11-08 19:15:00 · 766 阅读 · 0 评论 -
畅通工程(并查集)
Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?Input 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;原创 2017-10-30 16:24:58 · 361 阅读 · 0 评论 -
公路(最小生成树)
描述岛屿国家Flatopia是完全平坦的。不幸的是,Flatopia没有公共的公路。所以Flatopia的交通很困难。Flatopian政府意识到这个问题。他们正在计划修建一些高速公路,这样就可以在任何一个城镇之间行驶,而不必离开公路系统。 每个高速公路连接两个城镇。所有高速公路都沿着直线。所有高速公路都可以在两个方向上使用。高速公路可以自由交叉,但驾驶员只能在位于两条高速公路末端的小镇的高速公路之原创 2017-11-07 17:55:10 · 656 阅读 · 0 评论 -
铁路(栈)
某城市有一个火车站,有n节车厢从A方向驶入车站,按进站的顺序编号为1~n。现让它们按照某种特定的顺序进入B方向的铁轨并驶出车站。为了重组车厢,你可以借助中转站C。在程序中输入车厢数目和出站的特定顺序,如果可以则输出Yes,否者输出No。 样例输入: 5 1 2 3 4 5 5 5 4 1 2 3 6 6 5 4 3 2 1 样例输出: Yes No Yes 分析: 考原创 2017-10-21 21:27:24 · 912 阅读 · 0 评论 -
大整数相乘(分治)
感谢:http://blog.youkuaiyun.com/jeffleo/article/details/53446095继续变换:XY=AC2^n+[(A-B)(D-C)+AC+BD]2^n/2+BD把原来的AC、AD、BC、BD四个乘法转化成了AC、(A-B)(D-C)、BD三个乘法时间复杂度从O(n^2)变成O(n^1.59 )import java.util.Scanner;import stati原创 2017-10-19 09:03:50 · 490 阅读 · 0 评论 -
顺时针旋转矩阵
链接:https://www.nowcoder.com/questionTerminal/2e95333fbdd4451395066957e24909cc 来源:牛客网有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。 测试样例: [[1,2,3],[4,5,6],[7,8,9]],3原创 2017-09-12 11:00:21 · 743 阅读 · 0 评论 -
Help Jimmy(DP)
Description “Help Jimmy” 是在下图所示的场景上完成的游戏。场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超原创 2017-09-02 15:48:22 · 533 阅读 · 0 评论 -
最大差值(贪心)
题目描述 有一个长为n的数组A,求满足0≤a≤bimport java.util.*;public class LongestDistance { public int getDis(int[] A, int n) { int ans = 0; int min = A[0]; for (int i = 0; i < n; i++) {原创 2017-08-24 20:37:17 · 385 阅读 · 0 评论 -
左右最值最大差
题目描述 给定一个长度为N(N>1)的整型数组A,可以将A划分成左右两个部分,左部分A[0..K],右部分A[K+1..N-1],K可以取值的范围是[0,N-2]。求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值,最大是多少? 给定整数数组A和数组的大小n,请返回题目所求的答案。 测试样例:[2,7,3,1,1],5 返回:6大体思路: 因为题目要求最大值原创 2017-09-17 11:01:26 · 434 阅读 · 0 评论 -
求数组中区间中最小数*区间所有数和的最大值
给定一个数组序列,使得区间经过如下计算的值是所有区间中最大的:区间中的最小数*区间所有数的和如[6,2,1],则求出区间为[6] 输入: 3 6 2 1输出: 36大体思路: 给定一个数组序列, 使得区间经过如下计算的值是所有区间中最大的: 区间中的最小数*区间所有数的和 如[6,2,1],则求出区间为[6] 输入: 3原创 2017-09-16 15:35:14 · 3894 阅读 · 1 评论 -
链表的回文结构
题目描述 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 测试样例: 1->2->2->1 返回:true大体思路: 通过快慢指针法得到mid(慢的依次存入栈),对奇偶情况进行处理 然后依次出栈和链表后一半元素比较cla原创 2017-09-15 21:37:49 · 259 阅读 · 0 评论 -
二叉树的序列化
题目描述 二叉树被记录成文件的过程叫做二叉树的序列化。序列化的方法有很多,这里我们采用括号序列的方法将其序列化,所谓括号序列指的是对于一个节点生成一个括号,括号内是其子树的括号序列,其中左儿子(若存在)的括号在前,右儿子(若存在)的括号在后。对于给定的树,请设计高效的算法,将其序列化。 给定一个树的根节点指针root,请返回一个字符串,代表其序列化后的括号序列。public class Tree原创 2017-09-15 20:20:37 · 351 阅读 · 0 评论 -
串的模式匹配
题目描述 对于两个字符串A,B。请设计一个高效算法,找到B在A中第一次出现的起始位置。若B未在A中出现,则返回-1。 给定两个字符串A和B,及它们的长度lena和lenb,请返回题目所求的答案。测试样例: “acbc”,4,”bc”,2 返回:2import java.util.*;public class StringPattern { public int findAppeara原创 2017-08-25 09:10:32 · 381 阅读 · 0 评论 -
数字三角形(DP)
问题: 给定一个由n行数字组成的数字三角形,如下图所示: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大(每一步只能从一个数走到下一层上和它最近的左边的数或者右边的数)。输入: 第一行是数字三角形的行数原创 2017-08-10 21:23:34 · 366 阅读 · 0 评论 -
最长上升子序列(DP)
问题描述 一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列原创 2017-08-17 00:54:55 · 522 阅读 · 0 评论 -
最长公共子序列(DP)
给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。 比如字符串1:BDCABA;字符串2:ABCBDAB则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA思路: 1.分解子问题, 由空串与空串最长公共子序列的问题递推到两个字符串的最长公共子序列 2.从空串开始 保存每一个最长公共子序列,为下一个比自己原创 2017-08-17 23:22:02 · 947 阅读 · 0 评论 -
最佳加法表达式(DP)
题目:有一个由1..9组成的数字串.问如果将m个加 号插入到这个数字串中,在各种可能形成的 表达式中,值最小的那个表达式的值是多少思路: 添加完加号后,表达式的最后一个加号在第i个数字后面,那么整个表达式的最小值,则等于前i个数的m-1最佳加法表达式,加上i+1到n组成的数。//V(i,m-1)+num[i+1][n] V(n,m)表示在n个数字中插入m个加原创 2017-08-19 23:47:26 · 1165 阅读 · 0 评论 -
数组单调和
题目描述 现定义数组单调和为所有元素i的f(i)值之和。这里的f(i)函数定义为元素i左边(不包括其自身)小于等于它的数字之和。请设计一个高效算法,计算数组的单调和。 给定一个数组A同时给定数组的大小n,请返回数组的单调和。保证数组大小小于等于500,同时保证单调和不会超过int范围。测试样例: [1,3,5,2,4,6],6 返回:27解析: 注意题目:数组单调和为所有元素i的f(i)值原创 2017-08-24 21:55:47 · 687 阅读 · 0 评论
分享