算法
此专栏仅为个人学习记录所有,无别的意思
JustEasyCode
只写最简单的代码
展开
-
《递归回溯》求一个数字字符串的所有合法的IP地址
做一下这道题目,上次面试现场问到了,没回答出来,也是sb了。using System;using System.Collections;using System.Collections.Generic;using System.Text;using UnityEngine;[ExecuteInEditMode]public class MathfTest : MonoBehaviour{ public long num; private List<List<s.原创 2022-02-20 22:37:46 · 2331 阅读 · 0 评论 -
《算法》递归回溯最简单的题目
1,2,2,3,49,8,0,1,53,6,1,1,23,3,4,4,5例如一个二维数组,从任意一个点出发开始寻找出路径点总和大于等于2,小于等于4的路径集合,例如0-2 和 0-2-2满足条件。递归回溯简单来说就是设置标记,向下递归,出来后还原标记和其他状态等,我这里做简单一点就只考虑4连通,8连通异曲同工而已。直接上代码。using System.Collections;using System.Collections.Generic;using System.Text;using原创 2022-02-17 01:46:28 · 167 阅读 · 0 评论 -
某面谈问题
1.什么是哈希表一种键值对映射集合的数据结构,底层通过数组来存储元素,跟另一种映射关系的TreeMap是分开的,没有关系。2.为什么要使用红黑树来创建哈希表3.实现哈希表除了红黑树还可以使用什么数组,取余规整数组的长度4.使用数组怎么实现哈希表5.什么是堆排序选择排序的优化,原地建堆,求出最大值,和最后一个元素交换,堆元素减一,对第一个位置的元素进行siftDown操作,直到堆里面只有一个元素6.c#和c那个性能更好 为什么7.lua和c那个性能更好 为什么c , lua运行在虚拟机,要原创 2021-01-01 19:35:16 · 173 阅读 · 0 评论 -
Unity遮挡剔除-求出模型内最大立方体
最近应老大的需求,让我去整一个求出模型里能容纳的最大长方体,要考虑旋转,位移,性能等要求。为什么要搞这个b东西呢其实就是他们有个遮挡剔除的demo,可以设计一个东西为遮挡物,让其他东西为被遮挡物,这遮挡物拦在前面的时候,被遮挡物就可以被遮挡了就像这个cube2,遮住的时候就会自动隐藏了,关键是他这玩意还只能用球形和立方体作遮挡物,所以他就给我提了这玩意,让我算出来。让我回去想了一天,我说想不出来,本来以为老大能有什么牛逼的方法,但实际上也就提了下射线检测和正交矩阵,意思是要求出xmin,ym原创 2020-11-02 01:02:18 · 352 阅读 · 0 评论 -
栈Leetcode刷题
一个月前刷了leetcode上所有二叉树的简单的题目,一个月后自己还是在简单的范围内打转,烦死了,有很多东西并不会灵活的使用,今天来练习栈。public class Solution { public int ScoreOfParentheses(string S) { //真鸡儿难,我看了官方答案 //栈记录了每一个深度的分数 Stack<int> stack = new原创 2020-07-12 18:42:06 · 230 阅读 · 0 评论 -
Leetcode中二叉树简单题目题目总结
其实我最近找了个工作,过的有多废物就先不说了。这里总结一下二叉树的知识。二叉树镜像:请完成一个函数,输入一个二叉树,该函数输出它的镜像。做这一题建议先刷完二叉树深度的题目,为啥, 因为深度的题目简单,当然这题也简单是leetcode上简单的题目,不过我有多菜就先不说了。刷完深度的题目,对二叉树递归差不多就有点感觉了。/** * Definition for a binary tree...原创 2020-05-03 17:36:14 · 298 阅读 · 0 评论 -
删数问题
对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。例如,a=13243221,k=5,输出:121。贪心策略:遍历发现第一个非递增的值就把这个值删掉,如32,3可以删除,留下剩下的。#include<iostream>#include<cstring>#i...原创 2020-01-10 01:26:04 · 342 阅读 · 0 评论 -
Unity游戏开发中闭包的实际应用
写c#UI脚本的时候,会想到循环对多个按钮进行初始化,初始化监听的时候会添加委托事件,委托里会传递一个不同的参数,与i相关,此时形成一个闭包。这是正确的写法,点击不同的btn的时候打印出来的i是不一样的,因为不同的btn的函数外包不一样。但是如果少了外层一层函数的封包,所有的btn使用的都是start函数这个包那i值自然都是一样的是5了。...原创 2019-12-25 16:20:15 · 998 阅读 · 0 评论 -
01背包问题c++动态规划
01背包问题:典型的动态规划问题,每件物品只有一件,要么放入背包,要么不放入,限重量为m,不可拆分,求能装最大价值。#include<iostream>using namespace std;const int maxnum = 100;int c[maxnum][maxnum];int b[maxnum];int v[maxnum];int main() { in...原创 2019-12-25 15:10:21 · 503 阅读 · 0 评论 -
动态规划-最长公共子序列c++
#include<iostream>#include<cstring>const int maxnum = 100;int c[maxnum][maxnum];char s1[maxnum];char s2[maxnum];int len1, len2;using namespace std;void LCSL(){ for (int i = 1; i ...原创 2019-12-25 12:01:03 · 578 阅读 · 0 评论 -
会议问题贪心
n个会议,不同开始时间,结束时间,求一天最多能参加的会议数量是多少贪心策略:选择结束时间最快的会议参加,在结束时间相等的前提条件下选择开始时间最大的会议=>选择会议时长最短的参加。#include<iostream>#include<algorithm>const int maxnum = 100;using namespace std;struct Me...原创 2019-12-24 17:38:28 · 603 阅读 · 0 评论 -
阿里巴巴背包问题贪心算法
#include<iostream>#include<algorithm>using namespace std;//按性价比贪心策略typedef struct three { double w; //重量 double v; //价值 double p; //性价比 three(double wi, double vi, double pi) { ...原创 2019-12-24 11:07:29 · 284 阅读 · 0 评论 -
方程式题目解法c++
x+y+z = 303x+2y+z = 50两个方程如何用程序解出x,y,z 的解找到一个取值的变化范围根据代入法求解即求出来了。第2个#include<iostream>using namespace std;int main(){ int x, y, z;//cnt记录可行解个数 for (int x = 1; x < 10; x++) { y = 2...原创 2019-12-23 16:32:20 · 265 阅读 · 0 评论 -
基数排序c++实现
增加空间优化了桶内排序的过程,十进制例子就有十个桶,先个位排序一遍,再十位进桶到最高位时则是排好序的。int Maxbit(int A[], int n)//求待排序序列最大元素位数{ int maxvalue = A[0], digits = 0;//初始化最大元素为A[0],最大位数为0 for (int i = 1; i < n; i++) //找到序列中最大元素 if (...原创 2019-12-23 15:36:21 · 436 阅读 · 0 评论 -
堆排序c++实现
建立堆之后就是对堆的简单选择,不断的求出最大的那一个数#include<iostream>using namespace std;void Swap(int r[],int i, int j){ int t = r[i]; r[i] = r[j]; r[j] = t;}void Sink(int k,int n,int r[]){ while (2 * k+1 &...原创 2019-12-23 11:41:39 · 83 阅读 · 0 评论 -
快速排序c++
#include<iostream>using namespace std;int Partition2(int r[], int low, int high){ int i = low, j = high, pivot = r[low]; while (i < j) { while (i<j&&r[j]>pivot) j--; w...原创 2019-12-23 01:12:52 · 77 阅读 · 0 评论 -
合并排序c++实现
#include<iostream>using namespace std;void Merge(int r[], int low, int mid, int high){ int *B = new int[high - low + 1]; int i = low, j = mid + 1,k=0; while (i <= mid && j <...原创 2019-12-23 00:55:06 · 736 阅读 · 0 评论 -
折半插入排序c++实现
#include<iostream>using namespace std;void BSStraightInsertSort(int r[], int n){ //默认第一个元素是有序的 for (int i = 2; i < n; i++) { r[0] = r[i]; //哨兵 //后面的元素在前面的有序序列中找到插入位置,做n-1次插入,成功 /...原创 2019-12-22 21:48:03 · 416 阅读 · 0 评论 -
哈希表c++实现
哈希函数计算地址有冲突用探测函数获得新地址解决为什么哈希函数查找速度快,因为他是索引查找,最好o(1),别扯那个多没用的哈希函数计算地址这些东西。#include<iostream>using namespace std;const int maxnum = 15;int HT[maxnum]; //哈希地址表int HC[maxnum]; //计算单个地址的比较...原创 2019-12-22 10:07:16 · 401 阅读 · 0 评论 -
二叉查找树c++实现
#include<iostream>typedef struct BSTNode { int data; struct BSTNode* lchild; struct BSTNode* rchild;}*BSTree;using namespace std;void insert(BSTree& t,int e){ if (!t) { t = new B...原创 2019-12-21 11:51:35 · 83 阅读 · 0 评论 -
Prim和Kruskal性能比较
/*Prim 邻接表+优先队列优化Kruskal 邻接矩阵+并查级优化,因为Kruskal里没有需要遍历邻接边的操作,所以简单的用邻接矩阵结果保证:获得路径即可e因为要有生成树,原图必须是一条连通的路线,所以e>=n-1*/#include<iostream>#include<queue>#include<Windows.h>usin...原创 2019-12-20 17:16:31 · 724 阅读 · 0 评论 -
AOE关键路径-基于c++十字链表实现
AOE网,带权有向图,边表示活动,顶点表示事件,既有活动之间的先后制约关系,又有活动的消耗,从源点到汇点的带权路径长度最大的路径称为关键路径,其中的活动称为关键活动。#include<iostream>#include<stack>using namespace std;const int maxNum = 100;typedef struct arcNode...原创 2019-12-19 20:47:43 · 297 阅读 · 0 评论 -
AOV拓扑排序-基于十字链表实现
AOV:顶点:活动,弧:活动之间优先级判断AOV有向图网中有环,生成一个线性序列,满足i到j有一条路径,且序列中i一定在j的前面,i,j均为顶点。#include<iostream>#include<stack>using namespace std;const int maxNum = 100;typedef struct arcNode { //弧...原创 2019-12-19 15:13:04 · 293 阅读 · 0 评论 -
Kruskal算法c++实现
//集合避圈法,以边为主导,从某一条边出发#include<iostream>using namespace std;const int maxnum = 100;const int INF = 0x3F3F3F3F;typedef struct edge { int u; int v; int w; edge() { } edge(int ui, int v...原创 2019-12-19 11:21:46 · 341 阅读 · 0 评论 -
Prim最小生成树算法C++实现
时间:o(n2) 空间:o(n)集合避圈法,解决连通各个单位,费用最少的问题。选取一点加入S集合中,一次选取V-S离S集合最近的点,加入S中,知道V-S为空集,最小生成树完成。#include<iostream>using namespace std;const int maxnum = 100;const int INF = 0x3FFFFFFF;typedef s...原创 2019-12-18 19:55:47 · 616 阅读 · 0 评论 -
Dijkstra基于邻接表算法C++实现
为了解决单源最短路径问题,利用贪心算法,将顶点集合V划分为两部分,集合S和V-S,先求出以源点u邻接最短的一条路径,作为已确定顶点路径将顶点加入到S中,则S为已确定路径顶点集合,在V-S集合中更新与前面已确定点的邻接点若以新前驱路径距离更少,则更新,之后回到前面在V-S中找长度最短的路径顶点,加入S中,知道V-S中的集合为空。使用邻接表在更新邻接点路径长度的时候更加方便#include&...原创 2019-12-18 10:49:38 · 1540 阅读 · 0 评论 -
邻接多重表C++实现
邻接多重表是面向无向图的另一种链式存储结构,从边出发构建整个图,方便访问标记,删除边等操作,存储空间最少。易判断顶点之间的关系。#include<iostream>using namespace std;const int maxnum = 100;typedef struct edgeNode { int i; int j; struct edgeNode* il...原创 2019-12-17 18:26:34 · 573 阅读 · 0 评论 -
十字链表 c++实现
十字链表 c++实现十字链表面向有向图的另一种链表存储结构,包含了领接表和逆领接表的特性,可以快速的访问出弧和入弧,得到出度和入度。#include<iostream>using namespace std;const int maxNum = 100;typedef struct arcNode { //弧结点类型 int tail; //弧尾下标 in...原创 2019-12-17 15:49:21 · 537 阅读 · 0 评论 -
递归回溯-求全排列LUA实现
function Arrange(a,n) n = n or #a if n<=1 then printResult(a) return end for i = 1, n do a[i],a[n] = a[n],a[i] Arrange(a,n-1) a[i],a[n] = a[...原创 2019-12-16 20:25:51 · 236 阅读 · 0 评论 -
字符串整数
题目简单,但是要考虑输入字符串为空,无法转化成整数的情况,异常检测,程序崩溃检测。思路:从字符串最后一位开始读入*10的相应倍数求出sum。 static int StrToInt(string s) { int n = 0; if (string.IsNullOrEmpty(s)) return -1; ...原创 2019-06-18 12:34:11 · 221 阅读 · 0 评论 -
数组最大子序列和与二分查找
static void MaxSumArr(int[] arr) { int maxSum = 0; int thisSum = 0; for (int i = 0; i < arr.Length; i++) { thisSum +=...原创 2019-06-18 12:32:38 · 216 阅读 · 0 评论 -
递归-PrintDigit
static void PrintDigit(double n,int len,int count=-1){ if (n <0) { n = System.Math.Abs(n); Console.Write("-"); } int a = (int)(n * (Math.Pow(10,count)) % 10); Console.Write(a); if...原创 2019-06-18 12:29:08 · 1339 阅读 · 0 评论