Data Structure And Algorithm
文章平均质量分 50
Data Structure And Algorithm
w͏l͏j͏
心存敬畏,言有所戒,行有所止
展开
-
剑指 Offer 07. 重建二叉树
重建二叉树原创 2022-06-16 18:06:49 · 107 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
从尾到头打印链表原创 2022-06-15 17:41:31 · 161 阅读 · 0 评论 -
剑指offer 斐波那契数列
题目链接递归加个记忆化数组即可附代码:class Solution {public: long long a[42] = {0}; void init(long long a[]) { a[0] = 0; a[1] = 1; } long long Fibonacci(int n) { ...原创 2019-03-28 18:29:10 · 105 阅读 · 0 评论 -
递归思想求组合数
组合数应用:从n个球中取出m个,问一共有多少种不同的取法思想:如果m为0,那么一定只有一种取法,不用管n的个数 ,返回1;如果n小于m,比如从3个里面取4个,很显然是不可能的,返回0;如果n等于m,返回1;其他情况:假设有一个标记的球(实际没有),那么从n个球中取出m个球就有两种结果,带有标记的一堆,和不带有标记的一堆,假设函数F(N,M),那么将是F(N-1,M-1)+F(N-1,M)。...原创 2019-02-24 17:40:54 · 2517 阅读 · 0 评论 -
二叉树的基本操作(递归和非递归)
递归:#include<stdio.h>#include<malloc.h>#include <iostream>using namespace std;#define MAX 20int g_num;typedef struct BTNode{ /*节点结构声明*/ char data ; /*节点数...原创 2018-10-28 15:50:19 · 979 阅读 · 0 评论 -
Algorithm Gossip(斐波那契数列)
Fibonacci为1200年代的欧洲数学家, 在他的着作中曾经提到:「若有一只免子每个月生一只小免子, 一个月 后小免子也开始生产。 起初只有一只免子, 一个月后就有两只免子, 二个月后有三只免子, 三个月后有五只免子(小免子投入生产) ......。如果不太理解这个例子的话, 举个图就知道了 , 注意新生的小免子需一个月成长期才会投入生产, 类似的道理也可以用于植物的生长, 这...原创 2018-10-10 13:58:12 · 266 阅读 · 0 评论 -
汉诺塔(递归算法)C语言
河内之塔说明 河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的, 河内为越战时北越的首都, 即现在的胡志明市; 1883年法国数学家 Edouard Lucas曾提及这个故事, 据说创世纪时Benares有一座波罗教塔, 是由三支钻石棒(Pag) 所支撑, 开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc), 并命...原创 2018-10-10 13:42:10 · 14242 阅读 · 0 评论 -
POJ 1067 威尔夫博弈
威尔夫博弈:有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。Input输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a...原创 2018-08-04 22:05:09 · 181 阅读 · 0 评论 -
威尔夫博弈
题目描述:威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。对应ACM题目训练:https://vjudge.net/problem/HDU-1527参考代码:#include <stdio.h>#include <math.h>int m...原创 2018-08-03 20:03:44 · 211 阅读 · 0 评论 -
巴士博弈问题
题目描述:十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫《勇敢者的游戏》(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻。 今天,大家选择上机考试,就是一种勇敢(brave)的选择;这个短学期,我们讲的是博弈(game)专题;所以,大家现在玩的也是“勇敢者的游戏”,这也是我命名这个题目的原因。 当然,除了“勇敢”,我还希望看到“诚...原创 2018-08-03 19:37:09 · 1001 阅读 · 0 评论 -
快速幂取模
问题:求 a的 b 次方对 p 取模的值。对于较小的数,我们可以用暴力解法,用循环b次的方法来实现,算法复杂度为O(N),但是对于b比较大的情况,那么这种算法时间复杂度就很大了,因此引出了快速幂的定义:实例分析:例如我们要求2^7,首先我们可以将7的2进表示出来7 = 111;那么有:2^1 = 2;2^2 = 4;2^4 = 16;要求2^7,只需要...原创 2019-02-05 22:09:29 · 136 阅读 · 0 评论 -
大数运算 Java模板
用的Java大整数类 单组测试数据: import java.math.BigInteger; import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in)...原创 2018-08-05 09:33:14 · 212 阅读 · 0 评论 -
leetcode 11. Container With Most Water
题目链接思路:暴力枚举,时间复杂度O(N^2),空间复杂度O(1)AC代码:int min(int a,int b){ return a>b ? b:a;}int maxArea(int* height, int heightSize) { int ans = 0; for(int i = 0;i < heightSize;i++) ...原创 2019-02-28 20:26:25 · 94 阅读 · 0 评论 -
HDU 2212
点击链接进入题目思路1:枚举即可,因为999999999的最大DFS为9*9!,所以没有必要枚举到最后,如果枚举到最后会TLE思路2:直接写程序暴力出答案,输出即可两种思路代码:#include <bits/stdc++.h>using namespace std;int f(int n){ int f = 1; for(int i=1;i<=n;i+...原创 2019-02-28 19:11:31 · 190 阅读 · 0 评论 -
跳跃问题 jump game (1 & 2) Leetcode
/*55 跳跃有戏 dp解法给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不.原创 2020-08-02 16:47:07 · 193 阅读 · 0 评论 -
基础动态规划题
//Dynamic Programming test//No1 Lintcode 669 coin changes/*DescriptionYou are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If tha.原创 2020-07-29 00:44:51 · 84 阅读 · 0 评论 -
完全背包问题
问题描述以及样例:题目链接:点击此处有NN种物品和一个容量是VV的背包,每种物品都有无限件可用。第ii种物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,VN,V,用空格隔开,分别表示物品种数和背包容积。接下来有NN行,每行两个整数vi,wivi,w...原创 2019-03-17 11:15:10 · 318 阅读 · 0 评论 -
最大连续子序列和 DP 有道oj
利润题目链接 :http://oj.youdao.com/problem/P1038描述奶牛们开始了新的生意,它们的主人约翰想知道它们到底能做得多好。这笔生意已经做了N(1≤N≤100,000)天,每天奶牛们都会记录下这一天的利润Pi(-1,000≤Pi≤1,000)。约翰想要找到奶牛们在连续的时间期间所获得的最大的总利润。(注:连续时间的周期长度范围从第一天到第N天)。请你写一个...原创 2019-03-12 17:25:39 · 456 阅读 · 0 评论 -
采草药 01背包 动态规划
0-1背包问题的动态规划算法【问题描述】 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采...翻译 2018-07-03 10:31:41 · 455 阅读 · 0 评论 -
数数字 (卡输入的题)
Carryon 最近迷上了数数字,然后 Starry 给了他一个区间 [m, n],然后提了几个要求,1、需要将 m 到 n 之间的数全部转化成 16 进制,然后连起来。2、将连起来的数又转化成 10 进制。3、将最终结果对 15 取模。数据范围:1 <= m <= n <= 1000000000000输入单组输入 m 和 n 的值输出输出最终结果。...原创 2019-03-17 09:00:39 · 244 阅读 · 0 评论 -
计算矩阵鞍点
题目链接给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。11 3 5 6 912 4 7 8 1010 5 6 9 118 6 4 7 215 10 11 20 25思路:计算出每一行的最大值,更新到mx数组,计算出每一列的最小值,更新到mn数组,然后遍历数组,如果A[i][j]==mx[i] && A原创 2020-08-22 19:11:23 · 3461 阅读 · 1 评论 -
POJ 1163 The Triangle DP
题目:题目链接题目描述:73 88 1 02 7 4 44 5 2 6 5(Figure 1)Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that s...原创 2019-03-12 19:22:51 · 266 阅读 · 0 评论 -
尼姆博弈
题目链接:https://vjudge.net/problem/HDU-1850题目描述:一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄给爸爸买个小礼物 主动地 强烈地 要求洗一次碗 某一天早起 给爸妈用心地做回早餐 如果愿意 你还可以和爸妈说 咱们玩个小游戏吧 ACM课上学的呢~ 下面是一个二人小游戏:桌子上有M...原创 2018-08-04 22:50:48 · 116 阅读 · 0 评论 -
斐波那契博弈 HDU 2516
题目链接:https://vjudge.net/problem/HDU-2516题目详情:1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win".Input输入有多组.每组第1行是2<=n<2^31. n=0退出. Outp...原创 2018-08-04 21:35:30 · 116 阅读 · 0 评论 -
巴士博弈 hdoj
题目链接:https://vjudge.net/problem/HDU-2149参考代码:#include <iostream>#include <cstdio>using namespace std;int main() { int m,n,mod; while(scanf("%d %d",&m,&n)!=EOF) { mod = ...原创 2018-08-04 20:56:26 · 163 阅读 · 0 评论 -
KMP
/* Name: KMP Next Copyright: Author: Date: 18/10/18 23:13 Description: */#include <stdio.h>#include <string.h>int next[1000003];void GetNext(char *p,int next[]){ int plen =...原创 2018-10-20 12:27:06 · 94 阅读 · 0 评论 -
dotcpp 1269
题目链接:http://www.dotcpp.com/oj/problem1269.html第一次用结构体写题,发现用着挺方便的题目描述:某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(> 80),并且在本学期内发表1篇或1篇以上论文的学生均可获得; 2) ...原创 2018-07-02 18:05:11 · 448 阅读 · 0 评论 -
Leetcode 226 翻转二叉树(递归)
226. 翻转二叉树难度简单573翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1思路:递归翻转就好,先翻转根,然后翻转左子树,然后翻转右子树。...原创 2020-09-15 12:48:55 · 93 阅读 · 0 评论 -
Leetcode 70 爬楼梯(c++)
70. 爬楼梯难度简单1235假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶dp,到达i阶...原创 2020-09-15 11:35:08 · 163 阅读 · 0 评论 -
leetcode 169多数元素 (map实现)
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]输出: 2来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/majority-element实现思路:遍历数组,如果元素在map中,就用key索引元素,把对应的valu...原创 2020-09-06 21:01:10 · 118 阅读 · 0 评论 -
leetcode 191. 位1的个数
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’的个数(也被称为汉明重量)。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011中,共有三位为 '1'。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串 00000000000000000000000010000000中,共有...原创 2020-09-03 21:46:16 · 205 阅读 · 0 评论 -
leetcode 485. 最大连续1的个数
给定一个二进制数组, 计算其中最大连续1的个数。示例 1:输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.注意:输入的数组只包含0 和1。输入数组的长度是正整数,且不超过 10,000。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/max-consecutive-ones思路:遍历数组,cnt用来记录从当前1到遇到0的距离,如果大于结果res,更新...原创 2020-09-02 22:36:51 · 176 阅读 · 0 评论 -
连续子数组的最大和 剑指offer 42 || leetcode 53
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。提示:1 <=arr.length <= 10^5-100 <= arr[i] <= 100来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems...原创 2020-09-01 22:18:37 · 100 阅读 · 0 评论 -
Leetcode Two Sum
思路:利用Map,遍历数组,如果target-num[i]在哈希表中,那么返回两者的下标,否则将num[i]加入到map中。即使数组中存在相同的数字,也不会是map的key冲突,根据题设不可能会有两个答案,如果第一个存入的数字永远不满足题设,那么后面存入的和它相同的数字也不会满足题设,或者说没有必要存重复的。class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer,Integ原创 2020-08-02 17:23:27 · 98 阅读 · 0 评论 -
LC132. Palindrome Partitioning II 划分回文串
Given a string s, partition s such that every substring of the partition is a palindrome.Return the minimum cuts needed for a palindrome partitioning of s.Example:Input: "aab"Output: 1Explanation: The palindrome partitioning ["aa","b"] could be pr.原创 2020-08-02 16:54:12 · 105 阅读 · 0 评论 -
LIS 最长上升子序列的长度 LeetCode 300
package com.dp;/**** @author wanglj** @time 2020-7-29 23:36:17** @filecomment ** @fileName Solution.java** @packageName com.dp** @Todo LIS LC300 最长上升子序列的长度**///i状态可以从在它之前比它小的数字状态转换过来/* * 例如nums{2,3,5,1,6} * dp[0] = 1 {2} * dp[1] = max{dp[0]+.原创 2020-08-02 16:51:37 · 88 阅读 · 0 评论 -
LeetCode 9. Palindrome Number
题目:Palindrome Number含义:如果一个数正着读和倒着读一样,比如121倒读依旧是121,return true,而-121倒读是121-,return false示例:121true123false-121false示例AC代码:bool isPalindrome(int x) { if(x < 0) return f...原创 2019-02-24 17:15:39 · 95 阅读 · 0 评论 -
Leetcode 7. Reverse Integer-easy
题目描述:https://leetcode.com/problems/reverse-integer/输入输出示例:123321-123-32112012示例AC代码(C语言版) int reverse(int x) { int res = 0; while(x) { if(res > INT_MAX/10...原创 2019-02-24 15:34:40 · 133 阅读 · 0 评论 -
DFS 部分和问题
题目:n个数的数组a[maxn],问其中是否存在某些数,他们的和为k,如果存在,返回Y,否则,返回N.思想:从a[1]开始决定要不要加到sum上,如果到最后一个数也判断完成了,那么只需判断sum和k是否相等即可,用DFS来实现(递归)示例代码:#include <iostream>using namespace std;const int maxn = 1000...翻译 2019-02-26 22:26:05 · 202 阅读 · 0 评论 -
a*b%p a^b%p(快速幂)
a^b%p和 a*b%p问题(快速幂运算)a^b%p问题求 a 的 b 次方对 p 取模的值。输入格式三个整数 a,b,p ,在同一行用空格隔开。输出格式输出一个整数,表示a^b mod p的值。数据范围1≤a,b,p≤10^9输入样例:3 2 7输出样例:2首先,我们最直接的想法是直接用循环求出a的b次幂,之后对p取模,但是我们认真思考一下会发现,这种算法一是复杂度较高......原创 2019-04-05 17:15:14 · 2703 阅读 · 0 评论