![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
数据结构与算法
.net core game
致力于.net core全栈游戏服务器开发
展开
-
【程序员必会10大算法】 1.2分查找 2.分治 3.动态规划 4.kmp 5.贪心 6.prim 7.kruskal 8.dijkstra 9.floyd 10.马踏棋盘
程序员常用的10个算法: 1)2分查找 场景:非递归的二分查找。 (1)之前讲过递归算法. 非递归反而更好理解。 (2)需要先保证数组有序.2)dac(divide and conquer分治算法) (1)分治算法使用场景: 傅里叶变换 二分搜索 大整数乘法 棋盘覆盖 合并排序 快速排序 线性时间选择 最接近点对问题 ...原创 2020-09-28 16:29:48 · 525 阅读 · 0 评论 -
思考: 深度优先搜索dfs
1)dfs使用的地方挺多的,虽然说出自图结构,但是: 其实咱们解决的问题,往往就可以抽象为dfs2)如:连连看。 迷宫。 8皇后。马踏棋盘等问题。3)dfs是可以优化的,比如:结合贪心策略的马踏棋盘。 剪枝算法等。4)dfs的结果是可以保存下来的。 通过在递归中传入当前参数等。...原创 2020-09-28 17:39:51 · 202 阅读 · 0 评论 -
【字典树Trie】1.空间换时间 2.比hashmap快(使用了公共前缀)
1.原理:通过公共前缀,来降低查询时间的开销,是一种空间换时间的做法。2.比:hashmap快,是一种树形结构。常用于:统计、排序、保存大量的字符串(不限于)。原创 2021-11-28 13:28:25 · 209 阅读 · 0 评论 -
计算2个链表的交点
import java.util.HashMap;class Node { public Node next; public String val; public Node(String val) { this.val = val; }}public class Main { public static void main(String[] args) { // TODO 链表1 Node rootOne .原创 2021-04-14 14:13:15 · 123 阅读 · 0 评论 -
(dfs)组合总和(1.每次数字只允许使用一次 2.每次数字允许使用多次)
给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。解集不能包含重复的组合。示例1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [2,2,3]]示例2:输入:candidates = [2,3,5], targ...原创 2020-10-10 16:44:25 · 263 阅读 · 0 评论 -
(dfs) 解数独
编写一个程序,通过填充空格来解决数独问题。一个数独的解法需遵循如下规则:数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。空白格用'.'表示。一个数独。答案被标成红色。提示:给定的数独序列只包含数字1-9和字符'.'。你可以假设给定的数独只有唯一解。给定数独永远是9x9形式的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/prob...原创 2020-09-29 16:51:33 · 536 阅读 · 0 评论 -
(dfs)括号生成
数字 n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[ "((()))", "(()())", "(())()", "()(())", "()()()" ]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/generate-parentheses著作权归领扣网络所有。商业转载请联系官方...原创 2020-09-29 14:36:16 · 190 阅读 · 0 评论 -
(DFS)电话号码的字母组合
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/letter-combinations-o..原创 2020-09-29 12:01:33 · 204 阅读 · 0 评论 -
(dfs)求[1,2,2,3]的全排列(1.backRemove才行 2.Arraylist可以contain判断包含另外一个Arraylist 3.js版本3个坑,4个人,求全排列)
package JiaNan;public class FullPerm { static int kinds=0; public static boolean isRepeat(int a[],int start,int end) { for (int i = start; i < end; i++) if (a[i] == a[end]) ...原创 2013-04-30 15:14:52 · 915 阅读 · 0 评论 -
topK(划分法、最大顶堆法)
1)划分法/** 思路:利用快速排序的原理,每次选取第left的值作为参考值:找出一个划分位置low,使得L[low],左边的值比参考值大,右边的值比参考值小, 这样一直持续下去,直到low和K相等,则可以找到前K个最大值。因为选取每个参考值,都要遍历一遍数组,因此:算法复杂度为O(N)。 */function partition(L, left, right) { let low = left; if (left < right) { let ke原创 2020-12-31 14:03:54 · 514 阅读 · 0 评论 -
(dfs)3个A、3个B、3个C,输出满足条件:相邻的字母不能重复这样的序列
/** 问题:3个A、3个B、3个C,输出满足条件:相邻的字母不能重复这样的序列 */let c = [];function IsBetweenEqual(c) { for (let i = 0; i < 8; i++) { if (c[i] == c[i + 1]) { return false; } } return true;}function isThree(c) { let count .原创 2020-12-31 14:02:23 · 199 阅读 · 0 评论 -
(dfs)数独问题
1)求出所有解/** * 功能说明: * src_matrix配置好,即可计算出所有解 * 全部为0,则是全排列 */// 1个解的let src_matrix = [ [4, 3, 2, 1], [1, 2, 3, 4], [3, 4, 1, 2], [2, 1, 0, 0],];// 1个解的src_matrix = [ [1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 3, 0],原创 2020-12-31 14:01:43 · 259 阅读 · 0 评论 -
(dfs)奇怪的比赛
let c = [];/** * @param start 回答到第几题了 * @param n 当前分数 * @param totalNum 总共题目数 * @param targetNum 总分 * @param answer_list 答案 */function dfs(start, n, totalNum, targetNum, answer_list) { // 准备回溯到第11题,则结束 if (start == (totalNum + 1)) { .原创 2020-12-31 13:58:10 · 142 阅读 · 0 评论 -
(dfs)金蝉平方数
let c = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];let visit = [false, false, false, false, false, false, false, false, false, false];/** * 回溯法求出n位数字全排列 如 1,5 则求出5位数字的全排列 * @param start * @param n */function dfs(start, n) { if (start == n + 1) { .原创 2020-12-31 13:57:40 · 109 阅读 · 0 评论 -
(dfs)车票找零
let c = [];// 乘务员手里5角总价值let wujiaoRemainNum = 0;/** * @param start 起始递归数字 * @param wujiaoNum 当前还未上车5角人数 * @param yiyuanNum 当前还未上车1元人数 * @param answer_list 存储答案 */function dfs(start, wujiaoNum, yiyuanNum, answer_list) { if (wujiaoNum == 0 &a.原创 2020-12-31 13:57:05 · 127 阅读 · 0 评论 -
(dfs)mj回溯算法
/** * 基本思路: * 回溯法: 先挑选中将,再依次拆接出3个,3个的...直到结束,那么说明当前可以胡牌 */let mahjong = [ "1T", "2T", "3T", "4T", "5T", "6T", "7T", "8T", "9T", // 桶 "1S", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", // 条 "1W", "2W", "3W", "4W", "5W", "6W", "7W", "8.原创 2020-12-31 13:56:07 · 228 阅读 · 0 评论 -
(dfs)字母顺序问题
问题:3个A、3个B、3个C,输出满足条件:相邻的字母不能重复这样的序列代码:#includechar c[9]; //存储9个人的座位顺序const char choice[3] = {'A','B','C'};//判断相邻的两个字符是否相同bool judgeEqual(const char* c){for(int i = 0;i {if(原创 2013-05-04 22:45:25 · 1440 阅读 · 0 评论 -
(dfs)车票找零问题
问题:车票找零问题代码:#includeusing namespace std;/**************************/static int m5 = 0,m10 = 0;/**************************/static int proc[100] = { 0 }; //第一个必须是带5角的乘客,不然就会不够找零stat原创 2013-04-30 14:39:09 · 1268 阅读 · 0 评论 -
(dfs)奇怪的比赛
题目:奇怪的比赛代码:package Java;public class Test{public static int score = 10; //记录选手的得分public static int proc[] = new int[11]; //记录选手的答题过程 public static int t = 1;pub原创 2013-03-31 15:15:45 · 1327 阅读 · 0 评论 -
(dfs)连连看
<1>Cube.h#ifndef __JNTest__Cube__#define __JNTest__Cube__#include "cocos2d.h"USING_NS_CC;typedef enum CubeType{ CubeType_Red, //红 CubeType_Blue, //蓝 CubeType_White, ...原创 2015-07-01 16:14:00 · 720 阅读 · 0 评论 -
(递归)计算字符串之间的相似度
可操作规则:1,修改一个字符('a' 变 'b')2,增加一个字符("adbb" 变"aebbd")3,删除一个字符("travelling" 变 "traveling")求字符串strA变成strB的最少变换次数。package JiaNan;public class Main { static int CalStrDistance(String strA,in...原创 2013-07-16 16:31:08 · 1351 阅读 · 0 评论 -
(dfs)39台阶
public class N39_2 { static int f(int n) { if(n == 1) return 0; if(n == 2) return 1; return g(n-1) + g(n-2); } static int g(int n) { if(n == 1) return 1; if(n =...原创 2013-06-28 17:00:51 · 1009 阅读 · 0 评论 -
(dfs)21位水仙花数 1.BigInteger
package JiaNan;import java.math.BigInteger;public class ShuiXianHua{ public static int a[] = new int[10]; //在一共21个数字中,记录0~9每个数字出现的次数 public static BigInteger pw[] = new BigInteger[10]; /* ...原创 2013-05-16 00:04:56 · 1893 阅读 · 1 评论 -
(dfs)韩信走马分酒问题
泊松是法国数学家、物理学家和力学家。他一生致力科学事业,成果颇多。有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布。有一次闲暇时,他提出过一个有趣的问题,后称为:“泊松分酒”。在我国古代也提出过类似问题,遗憾的是没有进行彻底探索,其中流传较多是:“韩信走马分油”问题。有3个容器,容量分别为12升,8升,5升。其中12升中装满油,另外两个空着。要求你只用3个容器操作,最后使...原创 2013-03-31 14:29:49 · 3570 阅读 · 0 评论 -
(dfs)解答110问题
在123456789之间插入+号或者-号,或者不加,使这个算术表达式的结果恰好是110package JiaNan;public class Test{ public static String operate[] = new String[]{"+","-"," "}; public static void dfs(int m,int n,StringBuffer sourc...原创 2013-03-30 22:18:00 · 1057 阅读 · 0 评论 -
(递归)打印汉诺塔具体移动过程
#include<iostream>using namespace std;//////////////////////////////////void move(char a,char b,int n){ printf("将%d号盘子从%c移动到%c上\n",n,a,b);}//////////////////////////////////void ha...原创 2013-03-27 20:06:38 · 1430 阅读 · 0 评论 -
(dfs)整数划分问题
package JiaNan;import java.util.Scanner;public class ZSHF{ static int[] c = new int[100]; //将划分到的每个数字存储到c数组里面 static int num = 0; //存储待划分的数字 static void dfs(int start,int ...原创 2013-03-27 19:49:55 · 1790 阅读 · 0 评论 -
从(栈帧) 真正理解递归的含义
1.很可笑,从上大学开始老师就开始讲解递归,10年过去了,发现连递归的含义都没有理解2.查阅资料,都是说可以把递归当做调用另外一个函数来理解3.其实2个理解是正确的,但是仅仅那样子说,其实还是无法理解4.正确的理解方式是在看韩顺平老师讲解数据结构的栈结构时,讲的,函数调用的本质,其实都是会产生一个函数栈,每一个函数调用都会有函数栈5.以下面这个为例子:...原创 2020-05-22 11:13:45 · 576 阅读 · 0 评论 -
第四届蓝桥杯C++本科B组决赛解题报告
猜灯谜A村的元宵节灯会上有一迷题:请猜谜 * 请猜谜 = 请边赏灯边猜小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字。 请你用计算机按小明的思路算一下,然后提交“请猜谜”三个字所代表的整数即可。请严格按照格式,通过浏览器提交答案。注意:只提交一个3位的整数,不要写其它附加内容,比如:说明性的文字。连续奇数和小明看到一本书上写着:任何数字的立方都可以原创 2013-07-21 16:20:57 · 5492 阅读 · 2 评论 -
第四届蓝桥杯C++本科B组预赛解题报告
高斯日记 1799-7-16package JiaNan;import java.util.Calendar;import java.util.GregorianCalendar;public class GaoSiRiJi{ static Calendar c = new GregorianCalendar(1791,12-1,15); public static原创 2013-05-19 15:53:42 · 2468 阅读 · 0 评论 -
第二届蓝桥杯C++本科B组决赛解题报告
四方定理n == 0 f(n-i*i,a,idx+1)数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示。我们可以通过计算机验证其在有限范围的正确性。对于大数,简单的循环嵌套是不适宜的。下面的代码给出了一种分解方案。请仔细阅读,填写空缺的代码(下划线部分)。注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中原创 2013-07-09 16:13:14 · 1588 阅读 · 0 评论 -
第四届蓝桥杯本科A组解题报告(和B组相同的题目详见B组解题报告)
排他平方数639172package JiaNan;import java.math.BigInteger;public class PaiTaPingFangShu{ static int c[] = new int[7]; //存储这个六位数 static boolean vis[] = new boolean[11]; //记录0-9这10个数字是否原创 2013-05-21 14:35:51 · 3344 阅读 · 0 评论 -
第三届蓝桥杯C++本科B组决赛解题报告(更新中)
星期几9package JiaNan;import java.util.Calendar;import java.util.GregorianCalendar;public class XingQiJi{ static Calendar c = new GregorianCalendar(1949,10-1,1); static int num = 0; public sta原创 2013-07-04 15:20:56 · 1427 阅读 · 0 评论 -
第二届蓝桥杯C++本科B组初赛解题报告
微生物增殖 假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。 现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。 如果X=10,Y=90 呢? 本题的要求就是写出这两种初始条件下,6原创 2013-07-07 19:11:09 · 1513 阅读 · 0 评论