
数据结构与算法
仲翎逸仙
身常行慈,口常行慈,意常行慈
展开
-
打印正整数n拆分的所有情况
题目:把一个正整数n拆分成若干个正整数的相加,列出所有组合 例如:4=44=1+3=2+24=1+1+24=1+1+1+1动机:网上有好多解答,大部分都是给出拆分结果的个数,不能把把每一种的情况打印出来,或者效率低,本人接触这个题目很久了,最近心血来潮想搞定它,嘿嘿思路一:设置一个递归方法recursive(int last, int curSum, int n),该方法包含以下几个...原创 2019-12-31 11:12:10 · 1971 阅读 · 0 评论 -
集合的子集
题目描述请编写一个方法,返回某集合的所有非空子集。 给定一个int数组A和数组的大小int n,请返回A的所有非空子集。保证A的元素个数小于等于20,且元素互异。各子集内部从大到小排序,子集之间字典逆序排序,见样例。测试样例: [123,456,789]返回:{[789,456,123],[789,456],[789,123],[789],[456 123],[456]原创 2016-09-19 22:21:53 · 422 阅读 · 0 评论 -
字符串的大小写全排列
比如输入abc,a可以变成A,输出他们的全排列 8种,详见测试结果import java.util.ArrayList;import java.util.Scanner;public class Main { static ArrayList> lists=new ArrayList<>(); public static void main(String[] args) {原创 2016-09-20 12:35:15 · 1813 阅读 · 0 评论 -
最长公共子串
1、先科普下最长公共子序列 & 最长公共子串的区别:找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的。而最长公共子序列则并不要求连续。2、最长公共子串其实这是一个序贯决策问题,可以用动态规划来求解。我们采用一个二维矩阵来记录中间的结果。这个二维矩阵怎么构造呢?直接举个例子吧:"bab"和"caba"(当然我们现在一眼就可以看出来最长公共子串是"ba"或"...原创 2016-05-07 23:54:08 · 414 阅读 · 0 评论 -
最长公共子序列
原理动态规划方法解LCS问题的原理如下:考虑最长公共子序列问题如何分解成子问题,设A=“a0,a1,…,am-1”,B=“b0,b1,…,bn-1”,并Z=“z0,z1,…,zk-1”为它们的最长公共子序列。不难证明有以下性质:(1) 如果am-1=bn-1,则zk-1=am-1=bn-1,且“z0,z1,…,zk-2”是“a0,a1,…,am-2”和“b0,b1,…,bn-2”的一个最长公...原创 2016-05-22 13:23:17 · 2621 阅读 · 2 评论 -
腾讯笔试题 构造回文字符串
题目描述:给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.输出描述:对于每组数据,输出一个整数,代表最少需要删除的字符个数。输入例子:abcda google输出例子:2 2实现思想:首先保存s字符串,之后再保存其rs相反的字符串。对原创 2016-07-01 22:35:55 · 4366 阅读 · 0 评论 -
把正整数 n 转化成最少个数字的平方
题目描述:给一个正整数 n, 找到若干个完全平方数(比如1, 4, 9, ... )使得他们的和等于 n。你需要让平方数的个数最少。给出 n = 12, 返回 3 因为 12 = 4 + 4 + 4。给出 n = 13, 返回 2 因为 13 = 4 + 9。这个题目的思路是用动态规划,设 f(n) 为所求的最少个数。 那么 f(n)=min( f(i)+f(n-i)原创 2016-09-01 23:47:21 · 2141 阅读 · 0 评论 -
字符串的相似度
我们把两个字符串的相似度定义为:将一个字符串转换成另外一个字符串的代价(转换的方法可能不唯一),转换的代价越高则说明两个字符串的相似度越低。比如两个字符串:“SNOWY”和“SUNNY”,下面给出两种将“SNOWY”转换成“SUNNY”的方法:变换1: S - N O W Y S U N N - Y Cost = 3 (插入U、替换O、删除W)原创 2016-09-18 17:22:08 · 1272 阅读 · 0 评论 -
找零钱的方案数以及所需最少张数的钞票的方案
问题描述:我们知道人民币有1元,2元,5元,10元,20元,50元,100元这几种表示,现在给你一个整数 n 让你找零,求出有多少种方案。例如 n=4,则方案可为1+1+1+1,2+2, 1+1+2,总共3种。方案一 :笨方法 100a+50b+20c+10d+5e+2f+g=n,a,b,c,d,e,f,g分别为各种面值钞票的张数。通过穷举和限制条件可以求出方案原创 2016-09-02 09:26:52 · 8221 阅读 · 0 评论 -
击鼓传花
题目描述 学校联欢晚会的时候,为了使每一个同学都能参与进来,主持人常常会带着同学们玩击鼓传花的游戏。游戏规则是这样的:n个同学坐着围成一个圆圈,指定一个同学手里拿着一束花,主持人在旁边背对着大家开始击鼓,鼓声开始之后拿着花的同学开始传花,每个同学都可以把花传给自己左右的两个同学中的一个(左右任意),当主持人停止击鼓时,传花停止,此时,正拿着花没传出去的那个同学就要给大家表演一个节目。聪原创 2016-09-02 12:37:34 · 2772 阅读 · 0 评论 -
背包问题
原文链接: javacodegeeks 翻译: ImportNew.com- hejiani译文链接: http://www.importnew.com/13072.html背包问题问题假定背包的最大容量为W,N件物品,每件物品都有自己的价值和重量,将物品放入背包中使得背包内物品的总价值最大。背包问题wiki可以想象这样一个场景——小偷在屋子转载 2016-05-05 15:12:34 · 398 阅读 · 0 评论 -
双栈排序
给定一组整数,利用两个栈来将它们排序思路:声明两个栈S1,S2 我们约定将排好序的结果放在S2里面0 当S1不为空:1.先取出S1的栈顶元素A,2.用S2的栈顶元素B跟A比较如果B>A则S2出栈并且推入S1直到S2中的栈顶元素小于A;3.把A放进S24 返回 0实现代码:import java.util.ArrayList;import java.util原创 2016-09-16 11:20:11 · 504 阅读 · 0 评论 -
2017 京东校招编程题 进制转换
描述,输入一个整数N,输出该数字从2到N-1进制的和的平均值。比如 N=5,二进制为 101三进制为 12四进制 为11则输出为 (1+0+1+1+2+1+1)/3=7/3思路,用栈来实现进制转换代码:import java.util.*;public class Main { public static void main(String args[]){原创 2016-09-10 11:24:31 · 545 阅读 · 0 评论 -
整数分解为若干项之和
将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。输入格式:每个输入包含一个测试用例,即正整数N (0 < N ≤ 30)。输出格式:按递增顺序输出N的所有整数分解式子。递增顺序是指:对于两个分解序列 N1=n1,n2,⋯ 和 N2=m1,m2,⋯,若存在 i 使得 n1=m1, ⋯ , ni=mi,但...转载 2018-05-22 22:09:40 · 3212 阅读 · 0 评论 -
搜狗笔试:有两个数,A和B,六种操作分别是+12,-12,+7,-7,+5,-5。A经过若干次操作,变成B
由于本人是个菜鸟不会C++,只能用C写,哈哈。。。。描述 :有两个数,A和B,六种操作分别是+12,-12,+7,-7,+5,-5。A经过若干次操作,变成B 例如 A=12,B=24 那么只需要一个12即可,输入A=B=1,需要12,-12.。。。思想:用一个顺序非循环队列来处理此问题,这种队列的好处是虽然节点已经出列但数据依然保存在数组中,迷宫问题也可以用这种方法解决,算法原创 2016-05-07 23:19:51 · 1058 阅读 · 0 评论 -
1-n之间的素数
打印出1~n之间的素数原创 2016-05-09 11:08:52 · 1144 阅读 · 0 评论 -
C二叉树的基本操作---创建、遍历、求深度、求叶子结点
C语言二叉树的基本操作,创建遍历深度叶子原创 2016-07-13 18:41:33 · 1104 阅读 · 0 评论 -
最大子数组和
最大子数组和原创 2016-05-22 13:09:48 · 296 阅读 · 0 评论 -
约瑟夫环问题
描述:约瑟夫环算法的描述是: n 个人 围成一圈,每个人都有一个互不相同的密码,改密码是一个整数值,选择一个人作为起点,然后顺时针从 1 到 k (k 为起点人手中的密码)。数到 k 的人退出圈子,然后下一个人开始继续从 1 到 j (刚退出圈子的人的密码),数到 j 的人退出圈子。重复上面的过程,直到只剩下最后一个人。思路,建立循环单链表就可以解决问题了实现代码:pac原创 2016-07-19 23:05:33 · 488 阅读 · 0 评论 -
KMP算法
KMP算法的详细描述外加测试代码转载 2016-05-05 15:50:57 · 398 阅读 · 0 评论 -
汉诺塔问题
汉诺塔问题原创 2016-05-19 14:48:39 · 456 阅读 · 0 评论 -
2017滴滴出行面试题 n 张桌子吃饭的最大利润
描述:有n张桌子,每张桌子都有固定容量,有m批客人来吃饭,每一批客人都有自己的消费金额,规定客人不可以拼桌子,求老板如何安排才能获得最大利润:样例输入:3 5 // 分别代表 n 和 m2 4 2 // 分别代表每张桌子的容量 // 下面的 m 行的第一个数字表示人数,第二个表示原创 2016-09-10 11:08:03 · 2582 阅读 · 2 评论 -
华为机试 迷宫最短路径
闯迷宫 描述:sun所在学校每年都要举行电脑节,今年电脑节有一个新的趣味比赛项目叫做闯迷宫。sun的室友在帮电脑节设计迷宫,所以室友就请sun帮忙计算下走出迷宫的最少步数。知道了最少步数就可以辅助控制比赛难度以及去掉一些没有路径到达终点的map。比赛规则是:从原点(0,0)开始走到终点(n-1,n-1),只能上下左右4个方向走,只能在给定的矩阵里走。原创 2016-09-10 00:24:41 · 1856 阅读 · 0 评论 -
数字哑谜
数字哑谜原创 2016-05-31 11:34:26 · 681 阅读 · 0 评论 -
数组循环移位
数组循环移位原创 2016-06-01 10:48:51 · 296 阅读 · 0 评论 -
05 从尾到头打印连表
思路很简单,用一个栈来存储链表,再拿出来就反向了 实现代码:import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.Iterator;import java.util.List;import java.util.Scanner;import java.原创 2016-07-14 13:56:59 · 269 阅读 · 0 评论 -
八大排序之快排
八大排序之快排原创 2016-05-08 23:37:00 · 288 阅读 · 0 评论 -
八大排序之归并排序
八大排序之归并排序原创 2016-05-08 22:56:59 · 407 阅读 · 0 评论 -
八大排序之冒泡算法
八大排序之冒泡排序原创 2016-05-08 22:23:46 · 355 阅读 · 0 评论 -
神奇的排序
神奇的排序原创 2016-05-16 15:25:37 · 476 阅读 · 1 评论 -
八大排序之选择排序
八大排序之选择排序原创 2016-05-16 15:08:49 · 278 阅读 · 0 评论 -
八大排序之基数排序
代码:public class RadixSort{ public static void sort(int[] number, int d) //d表示最大的数有多少位 { int k = 0; int n = 1; int m = 1; //控制键值排序依据在哪一位 int[][]temp = new int原创 2016-05-16 14:54:26 · 271 阅读 · 0 评论 -
八大排序之堆排序
代码:public class HeapSort { public static void main(String[] args) { // TODO Auto-generated method stub int num[]={9,8,7,6,5,4,3,2,1,0}; HeapSort(num,num.length); for(int i=0;i<num.le原创 2016-05-16 11:59:24 · 263 阅读 · 0 评论 -
八大排序之希尔排序
希尔排序就是插入排序的升华版,具体可以百度。。。。代码:public class ShellSort { public static void main(String[] args) { int[]a={1,6,5,4,3,2,7}; //希尔排序 int d=a.length; while(true) { d=d/2; for(int x=0;x<d;x++)原创 2016-05-16 11:30:42 · 294 阅读 · 0 评论 -
java 递归创建二叉树
代码import java.util.Scanner;class TreeNode{ int val; TreeNode left=null; TreeNode right=null; public TreeNode(int val) { this.val=val; }}public class CreateBinaryTree { public static原创 2016-07-16 12:04:06 · 678 阅读 · 0 评论 -
用栈实现二叉树 C&java
用栈实现二叉树原创 2016-05-05 13:26:12 · 4188 阅读 · 0 评论 -
电话号码对应英语单词
电话号码对应英语单词原创 2016-06-01 16:50:59 · 1106 阅读 · 0 评论 -
金刚坐飞机问题
金刚坐飞机问题原创 2016-05-31 15:16:47 · 972 阅读 · 0 评论 -
人过大佛寺,寺佛大过人
人过大佛寺,寺佛大过人原创 2016-05-31 10:10:53 · 990 阅读 · 0 评论 -
10 打印二进制数中1的个数
题目描述: 对一个字节的无符号整型变量,求其二进制中1的个数代码:public class NumOf1 { /* 预定义的结果表 */ static int countTable[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3,原创 2016-06-03 11:06:31 · 361 阅读 · 0 评论