
算法
Turing·
不积小流无以成江海
展开
-
二叉查找树实现
二叉查找树的API实现原创 2022-06-02 15:23:08 · 556 阅读 · 0 评论 -
优先队列(二叉堆实现)
原理基于数组完成二叉堆的构建,根据父结点n,俩个子节点为2n、2n+1这个基本规律可以构建一个完全二叉树,且所有父结点都满足大于子结点这个规则。通过上浮和下沉操作恢复堆的有序性,满足在logN时间复杂度下完成插入和删除操作。API优先队列API init 初始化容量大小,初始化结点数量 insert 插入,在index标识后插入新节点,并完成上浮操作恢复堆有序性(父节点>子节点) delete 删除,记录索引为1的节点,把索引为index的结点赋值到索引为1的结原创 2022-05-29 19:45:33 · 265 阅读 · 0 评论 -
排序算法实现【选择、插入、希尔、归并、快速、堆】
选择排序每次遍历选择最小的往前排 public int[] sort(int []a){ for (int i = 0; i < a.length; i++) { int min = i; for (int j = i+1; j < a.length; j++) { if(sortMain.less(a[i],a[j])){ min = j;原创 2022-05-24 14:26:44 · 162 阅读 · 0 评论 -
剑指 Offer II 116. 省份数量 - 力扣(LeetCode)动态连通性问题(加权quick-union算法)
题目:力扣https://leetcode.cn/problems/bLyHh0/思路:动态连通性算法API模板init 初始化连通数组(存储头索引),初始化加权数组(存储集合size) union 连通 find 递归找头索引 边界条件(如果头索引=自己的索引返回) connected 判断是否连通 count 连通分量数量 初始化为n,每union一次-1 初始化连通数组source值为自己的索引,初始化加权数组size值为1,初始化连通分.原创 2022-05-19 18:35:45 · 504 阅读 · 0 评论 -
LeetCode字典树-连接词
题目力扣https://leetcode.cn/problems/concatenated-words/思路:使用字典树来对单词进行存储,初始化时根据单词长度升序排序,保证长的字符串始终在短的字符串后初始化,在初始化过程中就对子串进行dfs递归搜索,使用一个记忆数组优化递归次数(防止出现同一个子串二次搜索的情况),匹配成功的边界条件为匹配到最后一个字符正好为主串的结尾。根据isEnd标识来递归之前已经存入的子串。题解package leetcode.May;import java.io原创 2022-05-19 01:41:07 · 238 阅读 · 0 评论 -
剑指 Offer 13 机器人的运动范围 深度优先、广度优先算法题解
题目主要考察深度优先和广度优先搜索算法,核心为根据一个二维数组来保存查找状态(是否已被遍历过),再根据x,y未超过m,n、没有被遍历过、各位数和不超过k来做边界条件,最后要注意加上自己(0,0)题目 力扣https://leetcode.cn/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/package leetcode.May;import java.util.ArrayDeque;import java.util.LinkedList;impor.原创 2022-05-18 16:26:07 · 152 阅读 · 0 评论 -
Trie前缀树
class Trie { private Trie[] children; private boolean isEnd; public Trie() { children = new Trie[26]; isEnd = false; } public void insert(String word) { Trie node = this; for (int i = 0; i < word...原创 2021-12-28 23:00:07 · 288 阅读 · 0 评论 -
LeetCode算法日记
一、两数之和学习递归:https://lyl0724.github.io/2020/01/25/1/给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。来源:力扣(LeetCode)class Solution { public int[] twoSum(int[] nums, i...原创 2021-03-26 10:13:03 · 330 阅读 · 0 评论 -
递增三元组
//递增三元组#include"iostream"#include"algorithm"#include"cstring"#include"stdio.h"using namespace std;int main() { int a[100000], b[100000], c[100000]; int n; cin >> n; for (int i = 0; i...原创 2020-03-16 21:18:14 · 125 阅读 · 0 评论 -
求八位二进制数
//求二进制数#include"iostream"using namespace std;void toBinaryStr(int n, char* a) { int yb = 7; if (n >= 0) { a[0] = '0'; while (yb > 0) { if (n & 1) { a[yb] = '1'; } ...原创 2020-03-11 22:01:32 · 1841 阅读 · 0 评论 -
快速求幂,求最大公约数
#include"iostream"using namespace std;long pow2(int b) { //2的n次幂 int x = 2; int num = 1; while (b > 0) { if (b & 1) { num *= x; } b >>= 1; x *= x; } return num;}//最大...原创 2020-03-11 21:22:56 · 197 阅读 · 0 评论 -
找中位数
package yhf;public class Tests { static void zws(int a[],int s,int e,int z){ int x=s+1; int y=e-1; int num = s; if(e==z+1&&s==z){ return; } while(true){ if(a[s]>=a...原创 2020-03-08 19:06:20 · 188 阅读 · 0 评论 -
基数排序Java实现
package yhf;public class Mmm { static void sort(int b[],int num){ if(num==3){ return; } int c[][] = new int [10][10]; for(int i = 0;i<10;i++){ int y = (int) (b[i]/Math.pow(1...原创 2020-03-04 03:24:11 · 240 阅读 · 0 评论 -
基数排序Java实现
package yhf;public class Mmm { static void sort(int b[],int num){ if(num==3){ return; } int c[][] = new int [10][10]; for(int i = 0;i<10;i++){ int y = (int) (b[i]/Math.pow(1...原创 2020-03-04 03:22:40 · 115 阅读 · 0 评论 -
C++生成随机数
#include"iostream"#include"time.h"#include"algorithm"using namespace std;int main(){ srand(time(0)); cout<<rand()%100+1;}原创 2020-03-01 22:12:27 · 122 阅读 · 0 评论 -
快速排序C++
//快速排序#include"iostream"#include"time.h"#include"algorithm"using namespace std; void sort(int *a,int star,int end){ int i = star+1; int j = end; int num = star+1; while(true){ if(i>j...原创 2020-03-01 22:10:24 · 129 阅读 · 0 评论 -
归并排序C++
//归并排序 #include"iostream"#include"algorithm"#include"math.h" #include"stdlib.h"#include"time.h"using namespace std;void merge(int *a,int begin,int v,int end,int *result){ int i = begin; int...原创 2020-02-28 02:45:12 · 116 阅读 · 0 评论 -
海量数据处理
海量信息,即大规模数据。随着互联网技术的发展,信息越来越多,从中提取有用信息成为当前互联网技术发展必须要面对的问题。基本方法:1.Hash法Hash一般称为散列,他是一种映射关系,给定数据元素,其关键字为key,按一个确定的散列函数计算出hash(key),把hash(key)作为关键字key对应元素的存储地址(或称为散列地址),再进行数据元素的插入和检索。简而言之,散列函数就是一种将...原创 2019-09-11 16:09:46 · 150 阅读 · 0 评论 -
数据结构(算法)ps如果有新内容会补充
算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。特性:输入 输出 有穷性 确定性 可行性算法设计要求正确性 可读性(算法设计的另一目的是为了便于阅读,理解和交流) 健壮性(当输入数据不合法时,算法也能做出相应处理,而不是产生异常或者莫名其妙的结果)适用于高级算法,像蓝桥杯竞赛还没这么要求过 时间效率高(利...原创 2019-04-02 14:19:15 · 508 阅读 · 0 评论 -
二叉树(java实现)
二叉树基本概念:二叉树也称为二分树,二元树,对分数等,当集合为空时,该二叉树被称为空二叉树。结点的度:结点所拥有子树的个数称为该结点的度。叶结点:度为0的结点称为叶结点,或称为终端结点。分支结点:度不为0的结点,或者称为非终端结点,一颗的结点除了叶结点外,其他的都是分支结点。左孩子,右孩子,双亲:书中一个结点的子树称为这个结点的双亲,具有同一个双亲孩子结点胡成为兄弟。...原创 2019-09-10 17:01:29 · 171 阅读 · 0 评论 -
数据结构(查找)
1.顺序查找在两种情况下只能用顺序查找:线性表为无序表、链式存储结构的有序表2.二分查找只适用于顺序存储的有序表(从小到大)。对于长度为N的有序线性表,在最坏情况下,二分查找只需要比较log2N次,而顺序查找要比较N次。...原创 2019-04-13 19:45:24 · 556 阅读 · 0 评论 -
数据结构(排序)
排序:指将一个无序序列整理成按值非递减顺序排列的有序序列。排序种类 排序方法 说明 交换排序 冒泡排序 最简单的交换排序。在待排序的元素序列基本有序的前提下,效率最高 快速排序 插入排序 简单插入排序 每个元素距其最终位置不远时适用 希尔排序 选择排序 简单选择排序 堆排序 适用于较大规模的...原创 2019-04-13 20:00:34 · 257 阅读 · 0 评论 -
链表(Java实现)去重,查找,反转等
Node 结构package com.qyc.LinkedList;public class Node { public Node next = null; public int date; public Node(int date) { // TODO 自动生成的构造函数存根 this.date = date; }}MyLinkedList 功能pac...原创 2019-08-27 21:18:00 · 438 阅读 · 0 评论 -
栈(java实现)
Nodepackage com.qyc.Stack;public class Node<E> { Node<E> next = null; E date; public Node(E date) { super(); this.date = date; } }Stackpackage com.qyc.Stack;public c...原创 2019-08-29 21:49:47 · 136 阅读 · 0 评论 -
对列(java实现)
Nodepackage com.qyc.Queue;public class Node<E> { Node<E> next = null; E date; public Node(E date) { // TODO 自动生成的构造函数存根 this.date = date; }}MyQueuepackage com.qyc.Queu...原创 2019-08-29 22:11:14 · 288 阅读 · 0 评论 -
选择排序
原理:对于给定的一组记录,经过一轮比较后得到最小的记录,然后将该记录与第一个记录进行交换;重复操作,直到进行比较的记录只有一个时为止。注意:程序里要有判断是否是最大值,否则第一个会成为最大值SelectSortpackage 选择排序;public class SelectSort { public void sort(int a[]) { for (i...原创 2019-08-30 13:30:11 · 105 阅读 · 0 评论 -
插入排序
原理:对于给定的一组记录,初始时假设第一个记录自成一个有序的序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列为止。InsertSortpackage 插入排序;public class InsertSort { public void insertSort(int a[]) { if...原创 2019-08-30 14:09:27 · 102 阅读 · 0 评论 -
冒泡排序
原理:整个过程就像气泡一样往上升,单向冒泡排序的基本思想是:对于给定的n个数据,从第一个记录开始依次对相邻的俩个记录进行比较,当前面的记录大于后面的记录时,交换位置,进行一轮比较和换位后,n个记录的最大值将位于第n位,然后对前(n-1)个记录进行第二轮比较,重复该过程,直到记录只剩下一个为止。ps:这是我记住的第一个排序算法。俩种方法:package 冒泡排序;public c...原创 2019-08-30 14:42:36 · 117 阅读 · 0 评论 -
归并排序,快速排序,希尔排序
归并排序原理:利用递归和分治技术将数据序列划分为越来越小的半子表,再对半子表排序,最后再用递归方法将排好序的半子表合并成为越来越大的有序序列。划分半子表 合并半子表快速排序原理:采用分而治之的思想,把大的拆分成小的,再把小的拆分成更小的。给定一组记录,通过一趟排序后,将原序列分为俩部分,其中前一部分的所有记录均比后一部分的所有记录小,然后再依次对前后俩部分的记录进行快速排序,...原创 2019-08-31 13:44:05 · 117 阅读 · 0 评论 -
堆排序
堆是一种特殊的树形结构,其每个结点都有一个值,通常提到的堆都是指一颗完全二叉树,根节点的值小于(或大于)俩个子节点的值,同时根结点的俩个子树也分别是一个堆。堆排序是一种树形选择排序,在排序过程中,将R[1....n]看作一颗完全二叉树的顺序存储结构,利用完全二叉树中父结点和结点之间的内在关系来选择最小的元素。堆一般分为大顶堆(堆顶最大值)和小顶堆(堆顶最小值)俩种不同的类型。...原创 2019-09-01 21:01:35 · 110 阅读 · 0 评论 -
堆(java实现)
(因为这是按照自己的思路实现的,代码有点臃肿,后续会对代码进行优化)堆的创建 public static int[] createHeap(int a[]) { int temp = 0; //求深度 int depth = 0; int n = a.length; while (n>=1) { n = n/2; depth++; } Sys...原创 2019-09-02 17:33:59 · 930 阅读 · 0 评论 -
位运算
用移位操作实现乘法运算package bit_operation;public class MultiPlication { //用移位操作实现乘法运算 //m*2^n public static int power(int m,int n){ for(int i = 0;i<n;i++){ m = m<<1; } return m; } p...原创 2019-09-03 15:24:52 · 145 阅读 · 0 评论 -
数组(算法题)(1)
package com.qyc.arrays;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import org.junit.Test;import org.omg.CORBA.PUBLIC_MEMBER;public class Arrays_operation { // 1....原创 2019-09-05 13:38:38 · 271 阅读 · 0 评论 -
数组(算法题)(2)
// 用递归求数组中最大的元素 public static int max(int a, int b) { return a > b ? a : b; } public static int maxnum(int a[], int begin) { int length = a.length - begin; if (length == 1) { return ...原创 2019-09-06 15:20:10 · 283 阅读 · 0 评论 -
字符串(算法题)
实现字符串的反转package com.qyc.stringArithmetic;public class String_Arithmetic { //实现字符串的转 public void swap(char[] a,int i,int j) { while (i<j) { char temp = a[i]; a[i] = a[j]; a[j] = te...原创 2019-09-09 22:15:14 · 149 阅读 · 0 评论 -
DFS深度优先遍历
按要求打印数组的排列情况要求:“4”不能在第三位,“3”,“5”不能相连 //DFS深度优先遍历 打印数组的排列情况 4不能在第三位,3,5不能相连package com.qyc.stringArithmetic;import java.util.Arrays;import java.util.HashSet;import java.util.Iterator;import ...原创 2019-09-10 15:39:13 · 131 阅读 · 0 评论 -
数据结构算法题汇总
1. 在计算机中,算法是指什么?答案:解题方案的准确而完整的描述。2. ,算法的四个基本特征是?说明:可行性、确定性、有穷性和输入输出。3. 算法一般都可以用哪几种控制结构组合而成?答案:顺序、选择、循环。4. 算法的时间复杂度是指?答案:算法执行过程中所需要的基本运算次数。5. 算法的空间复杂度是指?答案:执行过程中所需要的存储空间。6. 算法分析的目的是?答案:...原创 2019-04-13 19:40:07 · 17663 阅读 · 0 评论