算法
PETERMAOSX
哎呦,不错哦!
展开
-
数据结构 - 链表实现双向队列
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DataStruct_Pro.Tree{ public class QueueNode { public int...原创 2020-02-04 23:03:34 · 255 阅读 · 0 评论 -
数据结构 - 栈的链式表示
本质还是单链表 不过加入了栈的性质using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DataStruct_Pro.Page_4{ public class Node { ...原创 2020-01-30 22:14:00 · 293 阅读 · 0 评论 -
数据结构 - 单链表的节点操作
单向链表节点的删除有三种不同的情况1、删除链表的第一个节点只要把链表头指针指向第二个节点即可。if (first.data == delNode.data) first = first.next;2、删除链表内的中间节点,只要将删除节点的前一个节点的指针,指向想删除节点的下一个节点即可newNode = null; //Point 1temp = first; //Po...原创 2020-01-29 03:52:50 · 1411 阅读 · 0 评论 -
C++ 动态查找问题
查找类问题:1、数字查找:给你一堆数字,让你在其中查找x是否存在2、字符串查找:给你很多字符串,让你在其中找出字符串s是否存在面对大量的数据量,很多人的想法是先sort排序,然后二分查找。可以使用map来做。问题:有n个整数的集合,想让你从中找出x是否存在。输入描述:第一行输入一个正整数n第二行输入n个正整数第三行输入一个q,表示查询次数接下来输入q行,每行一个正整数x,查询x是...原创 2020-01-14 20:58:59 · 353 阅读 · 0 评论 -
最简单的桶排序
桶排序,顾名思义:将所需要排序的数放进一个桶里面去即可,这些桶是已经按大小排列好了的。只需要对桶进行遍历,并且将桶中所保存的数取出来。题目:用桶排序的方法打印出两种排序,分别是递增、递减两种序列。要求用户先输入数字的总量,然后输入对应的数字import java.util.Scanner;public class t01{ public static void main(Stri...原创 2019-12-23 15:32:35 · 147 阅读 · 0 评论 -
算法-找出整数数组中的第K大的元素
//// t14.cpp// C++PLUS//// Created by mac on 2019/12/16.// Copyright © 2019 mac. All rights reserved.//#include <stdio.h>#include<iostream>#include<stdlib.h>#include&l...原创 2019-12-16 16:32:50 · 244 阅读 · 0 评论 -
算法-找出数组中的唯一值
在一个数组中,只有一个数有一个。其他的都是成对的有两个。比如 {99,22,99}这个数组里面只有22一个是单独的,需要找出这个数。使用到了^运算返回这两个数的差的绝对值例如: 4 ^ 2 返回 287 ^ 99 返回 12如果是 99 ^ 99 就返回0//// t12_.cpp// C++PLUS//// Created by mac on 2019/12/16....原创 2019-12-16 15:55:52 · 1510 阅读 · 1 评论 -
算法-字符串的去重
字符串去重分3种情况1、去掉重复的字符,并且只保留一个2、去掉重复的字符,如果有多个的保留两个3、去掉重复的字符,重复的一个都不保留对应第一种情况的解法:只需要对字符串进行遍历,如果遍历到重复的字符就跳过,如果遍历到不重复的就赋值第二种:需要在第一种情况下加一个判断bool变量,用于判断是否已经加了一个。第三种:还是判断当前遍历的位置和下一个位置进行判断,不过需要判断两次,因为如...原创 2019-12-16 12:03:35 · 2069 阅读 · 0 评论 -
算法-字符串的大小写排序
在一串有大写字符也有小写字符的字符串中,需要将大写字符放在前面,小写字符放在后面#include<iostream>using namespace std;void Solution(char * str){ int index = -1; //记录标记 int pos = 0; //遍历标记 for(;str[pos]!= '\0';pos++){ if(str...原创 2019-12-15 19:40:07 · 499 阅读 · 0 评论 -
算法-字符串反转
字符串反转的问题采用遍历的方法来//// t08_.cpp// C++PLUS//// Created by mac on 2019/12/15.// Copyright © 2019 mac. All rights reserved.//#include <stdio.h>#include<iostream>using namespace ...原创 2019-12-15 16:49:51 · 183 阅读 · 0 评论 -
算法-字符串_统计输入每个字符出现的次数
输入一串字符串用回车结束,输出输入的字符串中的各个字母的出现个数//// t08.cpp// C++PLUS//// Created by mac on 2019/12/15.// Copyright © 2019 mac. All rights reserved.//#include <stdio.h>#include<iostream>us...原创 2019-12-15 16:06:52 · 638 阅读 · 0 评论 -
算法-字符串的初级处理
初级处理的功能有递归求字符串的长度求字符串最后一个单词的长度(有无长度)//// t07_.cpp// C++PLUS//// Created by mac on 2019/12/15.// Copyright © 2019 mac. All rights reserved.//#include <stdio.h>#include<iostream...原创 2019-12-15 15:38:48 · 157 阅读 · 0 评论 -
爬楼梯问题
题目是这样的:一个有10个台阶的楼梯,人可以一次上一个,或者2个。请问有多少种方法上去。当楼梯级数很小时,凭借我们大脑弱小的计算能力,可以很快的得出答案。例如台阶数为1时,当然只有一种方法;台阶数为二时,有两种方法(11或2);台阶数为三时,有三种方法(111,12,21)。再随着台阶数的增长,我们会惊奇的发现☞天呐!我的脑子越来越不够用了?!如果台阶有20级,如果从前往后干,你慢慢从垮一级或...原创 2019-12-13 17:47:48 · 410 阅读 · 0 评论 -
Java-顺序存储的线性表
顺序存储和链式存储各有各的优缺点。顺序存储主要是通过数组的来实现的,因为数组天生就带有顺序存储的一切特性。通过顺序存储形成的线性表主要是通过数组下标的变更来对元素进行变更。接口package shunxu_Pro;public interface ShunxuLink { void append(Integer item); //添加 int size(); //返...原创 2019-12-13 12:10:55 · 198 阅读 · 0 评论 -
C++练习题-设计一个密码检测程序
//// t06.cpp// C++PLUS//// Created by mac on 2019/12/10.// Copyright © 2019 mac. All rights reserved.//#include <stdio.h>#include<iostream>#include<string>using name...原创 2019-12-10 22:06:16 · 1356 阅读 · 0 评论 -
Python,Java -无序链表
在链表中有一个经常使用的点,就是链表如果要遍历的话,需要经常用到current = self.head然后通过while 配合current = current.next来循环迭代class Node(object): def __init__(self,data): self.data = data self.next = None de...原创 2019-12-10 18:00:29 · 163 阅读 · 0 评论 -
求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。
接这个问题首先想到的方法是分治法,要求的是一串累加的数字。就需要一个变量来存储当前的总和,然后再依次计算。那么还有一个需要的变量就是如何让输入的数字有a aa aaa …这种格式。如果a=2 n=4的话,需要求的就是2 + 22 + 222 + 2222可以发现 2 = 010 + 2 22 = 210 + 2 222 = 22 * 10 + 2 2222=222*10+2有了这...原创 2019-11-30 16:53:35 · 4209 阅读 · 2 评论 -
算法思想-动态规划
通过把原问题分解成相对简单的子问题的方式求解复杂问题的方法性质:1、最优子结构:如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构的性质(既满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索2、重叠子问题:动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在...原创 2019-10-26 15:41:01 · 145 阅读 · 0 评论 -
C++-unordered_map的查找
在unordered_map中实现了一个哈希表,可以实现高效的查找若要判断一个值是不是在哈希表中使用mp.find(value) != mp.end()就可以知道你所查找的value是不是在mp中了#include<iostream>#include<vector>#include<map>#include<unordered_map>...原创 2019-10-25 19:41:00 · 12886 阅读 · 0 评论 -
算法-希尔排序算法(C++ and Python)
希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。其实和插入算法一脉相承,是插入算法的改进版算法主要步骤:选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;按增量序列个数 k,对序列进行 k 趟排序;每趟排序,根据对应的增量 ti,将待排序列分割成若干长...原创 2019-08-08 18:48:12 · 195 阅读 · 0 评论 -
算法-广度搜索和解决最短路径(C++)
广度搜索也叫层度搜索,是一层为单位来进行遍历图或者树的。一次将一个图的所有相邻节点遍历,之后再遍历刚刚遍历的相邻节点的相邻节点广度优先遍历求出了无权图的最短路径主要思想是:先将根节点推入队列中,然后再将根节点当做遍历的对象取出来。再将所有与根节点相邻的节点取出来加入到队列中,然后将队首的元素拿出来最为遍历的对象,然后将这个元素的所有相邻节点并且还未被遍历过的节点加入到队列中。然后再取出队首...原创 2019-08-22 23:40:34 · 601 阅读 · 0 评论 -
Java-自带的二分搜索和排序
java的Arrays 类中已经写好了排序和二分搜索package com.company;import java.util.Arrays;public class ArrayTest { public static void main(String[] args){ int[] a = {6,17,92,32,58,22,84,66,36,33}; //测试数据...原创 2019-08-28 18:52:06 · 877 阅读 · 0 评论 -
Java-StringBuilder类的常用方法
StringBuilder 类是可变的。它是 String 的对等类,它可以增加和编写字符的可变序列,并且能够将字符插入到字符串中间或附加到字符串末尾(当然是不用创建其他对象的)常用方法:测试代码package com.company;public class StringBuilderTest { public static void main(String[] args){...原创 2019-08-28 19:33:50 · 389 阅读 · 0 评论 -
算法-入门排序算法汇总(Java)
public class InsertSort{ public static void main(String[] args){ int[] my_list = {5,4,3,2,1}; sort(my_list); System.out.println(Arrays.toString(my_list)); } public static void sort(int[] arr)...原创 2019-08-29 21:25:31 · 75 阅读 · 0 评论 -
Java-搜索算法(二分,线性)
1、二分package com.company;public class BInarySearch { public static int search(int[] arr, int key) { int low = 0; int high = arr.length - 1; while (low <= high) { ...原创 2019-08-29 22:49:46 · 163 阅读 · 0 评论 -
算法导论-快速排序算法
对于A数组,分解成A[p…r]-> A[p…q-1] A[P] A[q+1…r]伪代码:QUICKSORT(A,p,r)if p<r: q=PARTITION(A,p,r) QUICKSORT(A,p,q-1) QUICKSORT(A,q+1,r)PAETITION(A,p,r)x = A[r]i = p -1for j=p to r-1: if A[j] &l...原创 2019-09-15 14:37:39 · 173 阅读 · 0 评论 -
算法导论-计数排序
计数排序并不基于元素的比较,而是一种利用数组下标来确定元素正确位置的算法。计数排序的核心在于将输入的数据值转化为键值存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序算法的时间复杂度O(n + k)(k为整数的范围)。简单描述就是,在一个有确定范围的整数空间中,建立一个长度更大的数组,如当输入的元素是 n 个 0 到 k 之间的整数时,建立一个长度大于等于k的数组。该数组的每一...原创 2019-09-15 20:15:57 · 210 阅读 · 0 评论 -
斐波那契数列-C
int main(){ int i; int a[40]; a[0] = 0; a[1] = 1; printf("%d",a[0]); printf("%d",a[1]); for(i=2;i<40;i++){ a[i] = a[i-1]+a[i-2]; printf("%d",a[i]); }...原创 2019-09-16 22:46:42 · 102 阅读 · 0 评论 -
python-回溯算法
什么是回溯算法?(递归?)回溯采用试错的方法解决问题。一旦发现当前步骤失败,回溯方法就返回上一个步骤,选择另外一种方式继续试错。(不碰南墙不回头)类似于走迷宫一样,我在第一个岔路口的时候选择一条路,然后走着走着,发现没路了。我就又返回我刚刚的那个岔路口,换一条没有走过的路。。这样一直走下去,总会走出迷宫的。(除非迷宫是个假迷宫)1、遍历所有的排序方式(遍历所有的可能结果)举一个春夏秋冬...原创 2019-09-22 16:51:58 · 1408 阅读 · 0 评论 -
python-一看就明白的迷宫问题的解法
迷宫问题的解法主要是使用了栈来解决将走过的每一步都加入到栈中如果走的是死路,就退栈到达了终点的话,就打印出栈中的值maze = [ [1,1,1,1,1,1,1,1,1,1], [1,0,0,1,0,0,0,1,0,1], [1,0,0,1,0,0,0,1,0,1], [1,0,0,0,1,1,0,0,0,1], [1,0,1,1,1,0,0,0,0...原创 2019-10-03 22:31:56 · 2344 阅读 · 0 评论 -
python-找零问题的解法
主要逻辑都在注释里面实现了用到了动态规划def recMC(coinValueList,change): minCoins = change #先试着全部用面值为1的硬币 if change in coinValueList: #如果在硬币面值里有刚好等于价格的硬币,那么可以只用这一个来完成交易 return 1 else: f...原创 2019-10-04 15:23:13 · 1307 阅读 · 1 评论 -
java排序算法-插入,冒泡,希尔,快速,选择
1、冒泡import java.util.Arrays;publci class Main{ public static void main(String[] args){ int [] arr = new int[] {5,4,3,2,6,5,7,8,9,10,111,7,8,12}; System.out.println(Arrays.toString(arr)); bub...原创 2019-10-06 15:03:43 · 133 阅读 · 0 评论 -
java数据结构-堆排序
package com.demo1;import java.util.Arrays;public class heapsort { public static void main(String[] args) { int [] arr = new int[] {9,6,8,7,0,1,10,4,2}; //开始位置是最后一个非叶子节点,即是最后一个节...原创 2019-10-07 16:52:22 · 83 阅读 · 0 评论 -
算法-通过深度遍历寻找图节点的路径(C++)
在图中遇到需要返回当前寻找的节点的路径问题的解决方法:1、设置一个新from数组来存储父节点2、在深度遍历的时候,将父节点存储到from中3、将from换成stack(栈)来存储,然后通过一系列的栈操作来实现将栈中的值添加到一个新的vector向量中3、编写show函数来展示新的vector向量的值代码实现template <class Graph> //查看路径cl...原创 2019-08-22 23:26:44 · 868 阅读 · 0 评论 -
算法-并查集"简单版本"(C++)
并查集可以用来解决连接问题。比如QQ上的好友关系网一样,可以随机抽取两个人,看看他们两个是不是有好友关系。#include<iostream>#include<cassert>using namespace std;class UF{private: int *id; int count;public: UF(int n){ id = new int...原创 2019-08-18 02:12:01 · 316 阅读 · 0 评论 -
算法-二叉搜索树的完全实现“增删改查”(C++)
这是完整的代码,其他分功能的叙述在其他文章里//// BST.cpp// algorithm//// Created by Mao on 2019/8/14.// Copyright © 2019 Mao. All rights reserved.////实现二分搜索树#include <stdio.h>#include <iostream>...原创 2019-08-17 02:41:32 · 531 阅读 · 0 评论 -
算法-图的实现和迭代器(C++)
图这个数据结构主要有两个关键值(节点和边)类似于这种图也分为有向图和无向图有向图类似于向量比如A->B 但是B->A不存在无向图就是A->B 并且 B->A无向图是一种特殊的有向图图的自环边和平行边对于图的表示方法,有两种常用的:邻接矩阵 和 邻接表邻接矩阵是通过使用二维矩阵来标识各个节点的连接状态邻接表是通过链表来存储各个节点存储的值下面是代码...原创 2019-08-19 23:02:42 · 337 阅读 · 0 评论 -
算法-在并查集中的一些优化(C++)
压缩路径方法1、将find函数的链式查找转换成树形查找int find(int p){ assert(p>=0 && p<count); //count是并查集的size while(p != father[p]){ father[p] = father[father[p]]; //如果节点的父节点不是自己(这个节点不是root节点),就向上移...原创 2019-08-19 14:43:33 · 140 阅读 · 0 评论 -
算法-二分查找法(C++)
原理算法实现template <class T>int binarySearch(T arr[],int n,T target){//在arr[l.....r]之中查找target int l = 0,r = n-1 while (l<=r){ //int mid = (l+r) /2; int mid = l+(r-l...原创 2019-08-14 12:29:31 · 189 阅读 · 0 评论 -
算法-并查集“优化版”(C++)
在简单版本上面进行了一点改进,可以使时间复杂度得到差不多一半以上的提升#include<iostream>using namespace std;class UF2{private: int *data; int count;public: UF2(int n) { data = new int[n]; count = n; for(int i = 0;i...原创 2019-08-19 00:35:03 · 198 阅读 · 0 评论