
算法
敲代码的乔帮主
走在梦想的大道上,跌跌撞撞,时而悲伤,时而难过失落,是什么又让我扬起头继续向前呢?是心中的那一朵彼岸之花,牵使着你我之间的约定,成为我心中那一股永不可灭的骨气,终究是信仰。
展开
-
剑指offer04-二维数组中的查找是否含有某个数字
1.题目在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断这个数组中是否含有这个数字。2.思路解析...原创 2020-11-20 12:46:54 · 359 阅读 · 0 评论 -
剑指offer03-寻找一维数组中重复的数字
1.题目描述在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。Input:{2, 3, 1, 0, 2, 5}Output:22.题目解析case1:一维数组在内存中占据连续的空间,因此我们可以根据下标定位对应的元素,总时间复杂度是O(n),空间复杂度是O(1)case2:不修改数组找出重复的数字,我们可以借助一个辅助数组,需要O(n)...原创 2020-11-17 21:18:21 · 387 阅读 · 0 评论 -
129. 求根到叶子节点数字之和(树)
1.题目描述给定一个二叉树,它的每个结点都存放一个0-9的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明:叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 25解释:从根到叶子节点路径 1->2 代表数字 12.从根到叶子节点路径 1->3 代表数字 13.因此,数字总和 = 12 ...原创 2020-10-30 11:07:02 · 235 阅读 · 0 评论 -
344. 反转字符串(双指针+字符串)
1.题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:["H","a","n","n","a","h"]输出:["h","a","n","n".原创 2020-10-22 19:36:34 · 166 阅读 · 0 评论 -
844. 比较含退格的字符串(String字符串)
1.题目描述给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。示例 1:输入:S = "ab#c", T = "ad#c"输出:true解释:S 和 T 都会变成 “ac”。示例 2:输入:S = "ab##", T = "c#d#"输出:true解释:S 和 T 都会变成 “”。示例 3:输入:S = "a##c", T = "#a#c"输出:tru.原创 2020-10-20 09:20:58 · 176 阅读 · 0 评论 -
242. 有效的字母异位词(String字符串)
1.题目描述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。2.代码package com.string.easy.LeetCode242;import java.util.Arrays;import java.util.Hash.原创 2020-10-13 19:38:35 · 298 阅读 · 0 评论 -
1470. 重新排列数组
1.题目描述给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排列,返回重排后的数组。示例 1:输入:nums = [2,5,1,3,4,7], n = 3输出:[2,3,5,4,1,7]解释:由于 x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 ,所以答案为 [2,3,5,4,1,7]2.开辟一个新vector:时间O.原创 2020-09-20 11:10:24 · 254 阅读 · 0 评论 -
1431. 拥有最多糖果的孩子(数组)
1.题目描述给你一个数组candies和一个整数extraCandies,其中candies[i]代表第 i 个孩子拥有的糖果数目。对每一个孩子,检查是否存在一种方案,将额外的extraCandies个糖果分配给孩子们之后,此孩子有 最多的糖果。注意,允许有多个孩子同时拥有 最多的糖果数目。示例 1:输入:candies = [2,3,5,1,3], extraCandies = 3输出:[true,true,true,false,true]解释:孩子 1 有 2...原创 2020-09-17 10:04:47 · 251 阅读 · 0 评论 -
1512. 好数对的数目(vector+unordered_map)
1.题目描述给你一个整数数组 nums 。如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。返回好数对的数目。示例 1:输入:nums = [1,2,3,1,1,3]输出:4解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始2.暴力求解#include <iostream>#include <vector>#inc.原创 2020-09-16 19:47:40 · 195 阅读 · 0 评论 -
1480. 一维数组的动态和(数组)
1.题目描述给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。示例 2:输入:nums = [1,1,1,1,1]输出:[1,2,3,4,5]解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1原创 2020-09-14 10:36:16 · 1088 阅读 · 0 评论 -
1. 两数之和(数组+哈希表)
1.题目描述给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]2.解题方法2.1 暴力求解...原创 2020-09-09 12:09:29 · 392 阅读 · 0 评论 -
深度优先搜索VS广度优先搜索 (含算法实现)
一:深度优先搜索DFS我们以图为例,图是由一些小圆点(顶点)和连接这些小圆点的直线(边)组成。例如:现在我们想要遍历这个图,我们可以从1号顶点开始,遍历就是将图中每一个顶点都访问一次。使用深度优先搜索会得到这么一个结果他们身上标注的数字就是他们的访问次序。这个次序还有一个非常好听的名字叫时间戳。下面我们来分析这个深度优先搜索的整个过程。过程分析:首先是从一个未曾走过的顶点作...原创 2019-09-22 15:25:44 · 3520 阅读 · 3 评论 -
斐波那契数列(递归与非递归实现)
首先来说下递归,递归的思想是大事化小。斐波那契数列:1,1,2,3,5,8,13,21........设f(n)是第n个斐波那契数,当n<=2,斐波那契数都为1;当n>2,那么第f(n)个斐波那契数就等于前两个斐波那契数之和。递归的代码实现:#include<stdio.h>int fbnq(int n){ if (n <= 2)...原创 2019-02-25 10:47:35 · 1038 阅读 · 0 评论 -
保证一看就明白的KMP算法
最近花了些时间学习kmp算法(看毛片算法),对于没有基础的人来说,开始学一个东西都会非常痛苦,我也是这样。反反复复读了好久相关的文章,终于有些明白是怎么回事了,这里给大家推荐下我的学习路径。首先,我推荐大家看阮一峰的博客文章——字符串匹配的kmp算法。这篇文章篇幅不长,但写得非常清楚明白,文章中用例子给出了kmp到底是怎么操作的一个过程,不过并没有给出代码。我自己看懂了以后,就直接写了一个kmp,...原创 2018-07-10 00:03:41 · 1273 阅读 · 0 评论 -
剑指offer09-用两个栈实现一个队列
思路:有两个栈,栈1和栈2.当入栈的时候,我们将它全放进栈1中,当需要出栈的时候,我们将栈1出栈到栈2中,然后再将栈2依次出栈。出完栈之后,再把stack2中的数pop出push到stack1,接受下次的操作。所以入栈的时候,思路很简单,注意到要将int类型转为Integer类型,我们使用了new Integer(int);当需要出栈的时候,我们用API提供的方法while(stack1.isEm原创 2017-12-12 15:46:19 · 378 阅读 · 0 评论 -
八大排序算法(java实现)
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,原创 2017-11-16 10:26:55 · 542 阅读 · 0 评论 -
杭电ojproblem-4135容斥定理
Co-primeTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 626 Accepted Submission(s): 234 Problem DescriptionGiven a number N, you are...原创 2017-07-29 09:32:51 · 411 阅读 · 0 评论 -
杭电problem1005-Number Sequence
本题思路:给出的公式,第一个想到的是递归,使用递归实现,果然超内存,因为1 <= n <= 100,000,000(嘿嘿,我知道不用试也应该知道);接下来尝试使用栈的方式实现,超时了,至此偷懒不成功,开始寻找更好的方法吧。 最终通过网上各种查找,再加上自己的思考和摸索,理解如下: (1)很明显f(n)的取值范围为0~6 (2)在A,B给定的情况下,f(n)...原创 2017-07-26 11:14:37 · 1288 阅读 · 1 评论 -
杭电problem6033- Add More Zero
题意:给定m,求最大的k 满足10^k ≦ (2^m) -1 思路: 利用log公式,得到k <= ,即 k =取下限由于不存在 所以 #include <iostream> #include <cstdio> #include <cmath> using name...原创 2017-07-26 10:28:29 · 377 阅读 · 0 评论 -
杭电problem6043- KazaQ's Socks
#include<iostream>using namespace std;typedef long long int ll;int main(){ ll n,k; int num=0; while(cin>>n>>k) { cout<<"Case #"<<++num<&原创 2017-07-26 10:22:58 · 416 阅读 · 0 评论 -
Lucas定理-saving beans
解决问题:求把m个果实放到n个树的方案数,并将答案对p求余。利用了Lucas定理和大组合数取模的过程。将题目转化为方程x1+x2+x3+...+xn = m 的解的数目,即n个树上的果子数之和等于m,利用插板法思想,就是把m分解成n个数之和,把m看成m个1,那么有m+1个空,以后每插入一个板子后,空都比之前多一个,m分成n个数之和只要插n-1个板子,然后板子先后插是没有差别的,...原创 2017-07-25 10:43:19 · 402 阅读 · 0 评论 -
2017山东省-D-Hex
利用 (1,1)+x*(1,0)+y*(2,1)+z*(1,1)=(a,b).求得 x+2*y+z=a-1;y+z=b-1; 得 x+y=a-b; y+z=b-1 y<=min(a-b,b-1)枚举y,解出,x,z,然后解出 c(x+y+z,x)*C(y+z,y)*C(z,z) ,表明走x个左方向 y个下方向和z个右方向有多少种方案, 用 res加上。 #incl...原创 2017-07-25 10:29:05 · 365 阅读 · 0 评论 -
巴氏(bash)威佐夫(Wythoff)尼姆(Nim)博弈之模板
Bash(巴氏)博弈,这是比较简单的一种,原理就不解释了,相信大家都懂,代码很简短,只需要输入这一堆石子的数目,输赢立刻见分晓 #include<iostream> using namespace std; int main(void) { int cas,total,price; ...原创 2017-07-24 10:44:40 · 684 阅读 · 0 评论 -
杭电problem1004- Let the Balloon Rise
输入字符串,找出字符串出现次数最多的一个串AC代码: #include <stdio.h>#include <string.h>int main(){ int N=1,max,e,i,j; char color[1010][15]; int count[1010]= {1}; while(scanf("%d",&a...原创 2017-07-23 16:43:45 · 459 阅读 · 0 评论 -
剑指offer07-根据前序和中序遍历重建二叉树
其实对于二叉树的各种遍历算法的具体实现难度远远大于理解,对我来说在上数据结构课时,就对前、中、后三种遍历思想有自认为还可以的理解(也就是说给我一棵树,我绝对可以准确的写出它的三种遍历序列,也可通过已知的前(后)序列和中序序列重新画出这棵树),但到了具体的代码实现就比较懵逼了。。。对递归这种需要在脑子中像计算机一样跑N遍的方式好难准确无误的推敲啊。。。每次遇到递归的算法就很尴尬,看的懂但是不会自己写原创 2017-07-20 20:00:35 · 695 阅读 · 0 评论 -
剑指offer06-从尾到头打印链表
package www.niuke.offer;import java.util.ArrayList;/* * 输入一个链表,从尾到头打印链表每个节点的值 */public class test03 { public static ArrayList printListFromTailToHead(ListNode listNode) { ArrayList原创 2017-07-20 19:45:28 · 482 阅读 · 0 评论 -
剑指offer05-替换字符串中的空格
package www.niuke.offer;/* * 请实现一个函数,将一个字符串中的空格替换成“%20”。 * 例如,当字符串为We Are Happy. * 则经过替换之后的字符串为We%20Are%20Happy。 */public class test02 { public String replaceSpace(StringBuffer str) { int le原创 2017-07-20 19:43:44 · 522 阅读 · 0 评论 -
杭电problem1018-大数(阶乘的位数问题)
思路:1.按照阶乘的定义算这个数的阶乘,然后再检查位数。一看题目条件肯定会超时。2.求一个数有N多少位,可用log10(N)+1,于是,求N!有多少位log10(1*2*3*……*n)=log10(1)+log10(2)+……+log10(N)+1就有了下面的程序(已通过)--------------------------------------------------------...原创 2017-07-18 18:20:40 · 407 阅读 · 0 评论 -
杭电problem1003-动态规划
贴AC源码: #include <iostream>using namespace std;int main(){ int t; cin>>t; if(t>=0&&t<=20) { for(int i=1;i<=t;i++) { int first,second,temp=1; int sum=0...原创 2017-07-13 18:37:12 · 455 阅读 · 0 评论 -
动态规划:求最长公共子串/最长公共子序列
最长公共子序列和最长公共子串区别 最长公共子串(Longest Common Substring)与最长公共子序列(Longest Common Subsequence)的区别: 子串要求在原字符串中是连续的,而子序列则只需保持相对顺序一致,并不要求连续。例如X = {a, Q, 1, 1}; Y = {a, 1, 1, d, f}那么,{a, 1, 1}是X和Y的最长公共子序原创 2017-06-18 21:03:01 · 765 阅读 · 0 评论 -
1.构造回文(2017.6.18)
题目: [编程题] 构造回文时间限制:1秒空间限制:32768K给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出一个整数,代表最少...原创 2017-06-18 19:07:55 · 500 阅读 · 0 评论 -
一头扎进《快速排序》
一头扎进《快速排序》今天去听了一个讲座,师姐很厉害,在她的演讲中她提到了很多东西,未能够及时消化,回来马上开始码文档。师姐今天提及快排,但是要求我们要用**非递归**来实现。以前并没有很在意这些细节,想着能理解写出来不就可以了吗,今天特来写博文认错。大家知道快排效率为O(N*logN),在这几种排序方法中也算是效率较为高的一种算法了,采用的是“分治法”的思想,百度上描述为“是C.R.A.Ho原创 2017-06-11 20:38:02 · 436 阅读 · 0 评论 -
快速幂入门
Description输入3个数a,b,c,求a^b mod c=?Input多组数据:每组数据,三个数a,b,c。Output对于每一组数据,输出一个数,即a^b mod c 的答案。Sample Input5 10 9Sample Output4 #include <cstdio> long long PowerMod(lo...原创 2017-02-07 16:18:20 · 482 阅读 · 0 评论 -
poj1061 青蛙的约会(扩展欧几里得算法求解同余方程)
青蛙的约会Description两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到...原创 2017-01-18 15:08:37 · 772 阅读 · 0 评论 -
sdnuACM1012区间合并问题
Description给定n个开区间,合并他们中的重合者,输出合并后的区间数量。Input第一行:n(1 <= n <= 1000)第2至第n+1行:每行两个整数,第i行的两个整数表示第i-1个区间的左边界和右边界。Output合并后所剩余的区间数量。Sample Input31 32 56 7Sample Output2 #in...原创 2016-10-24 13:15:43 · 2614 阅读 · 0 评论 -
sdnuACM1011盒子与球
Description现有r个互不相同的盒子和n个互不相同的球,要将这n个球放入r个盒子中,且不允许有空盒子。则有多少种放法?Inputn, r(0 <= n, r <= 10)。Output有多少种放法。Sample Input3 2Sample Output6 #include <stdio.h> #include ...原创 2016-10-24 13:04:35 · 715 阅读 · 0 评论 -
Description 对于一本共有n页的书,它的页码从1开始编号,一直到n,页码中没有无用的0,则该书页码中分别共用到了多少个0,1,2,3,4,5,6,7,8,9?
#include<stdio.h> int main(){ int a[10] = {0}; int input,i,j,m; printf("输入总页数:\n"); scanf("%d",&input); for(i = 1;i <= input;i++) { ...原创 2016-10-23 11:24:26 · 5414 阅读 · 0 评论