![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 66
才疏学浅的莫笑天
飞鸟与鱼不同路,从此山水不相逢。
展开
-
2021/10/25 python数据结构:基于python的二叉树结构,四种遍历以及树的还原
# 导入队列库from collections import dequeclass BiTreeNode: def __init__(self, data): self.data = data self.l_child = None self.r_child = None# 前序遍历def pre_order(root): """ 传入根节点,前序遍历,根据中左右的原则去走。 :param root: :原创 2021-10-25 22:17:50 · 373 阅读 · 0 评论 -
辗转相除法的原理解析与实现
今天看到个问题就随便写写。????辗转相除法辗转相除法又名欧几里得算法,是由欧几里得(古希腊数学家)率先提出的,因此又名欧几里得算法。文章目录辗转相除法算法原理推导代码方面:算法原理推导下图为实例:可以看到整体的过程就是对于两个数a和b,进行一个a mod b,b mod (a mod b)的的过程,上面的情况说明,对于两个数a和b来说,他们的最大公约数就等于b与(a mod) b的公约数,这就很有意思了,为什么呢。来看证明:代码方面:这种推导过程的话,用递归或者循环都可以原创 2021-04-29 01:55:17 · 2231 阅读 · 0 评论 -
无代码,kmp算法,next数组的两种快速求法。
首先设置一个数组用来举例子。第一种方法利用原理角度,也就是书本上给我们所讲的角度去解决,我们知道,所谓的next数组描绘的是数组的字符串对称程度。简单来说,字符串的对称程度越高,next数组就越大,但是这里的对称程度也不是类似于abccba这种,而是abcabc这种。我们默认为第一第二个next数组值为0,1即:从第三位开始的next数组值:若该位前一位对应的next值那一位等于该位数据,则该位的next数值等于前一位加1.若不等: 则顺着next值往前找,直到某个值对应next的对应的原创 2021-01-06 11:25:19 · 638 阅读 · 1 评论 -
力扣 547. 朋友圈 c语言 三种解法 深搜 广搜 并查集。
题目:并查集:/*力扣 547 朋友圈 并查集 c语言 2020/12/14 1:04 by ksks14*//*初始化 查找 合并*/#define maxsize 10000int flag[maxsize];//定义flag数组,用于并查集的查找 int find_root(int n){//并查集的查找 if(n==flag[n]) return n; else return flag[n]=find_root(flag[n]);//递归查找(深度搜索),直到根 }int原创 2020-12-14 17:07:22 · 521 阅读 · 0 评论 -
简单题也要这么写吗??力扣 回文链表 多种判断 附解析c语言实现
题目题目非常简单,无非就是判断一个没用头结点的指针,是否为回文链表,但是简单的题目往往值得更深的思考。该题目有很多的解法,想要在时间击败百分百的话,不仅仅是代码本身,可能跟电脑还有一定的关系。全遍历,入数组:思路很容易想到,第一次遍历完整个链表,一边遍历,一遍把节点入数组并计算长度,最后用数组中的元素判断,规避了指针不能随意访问的难受问题。时间:O(N),空间:O(N)。int q[70000];bool isPalindrome(struct ListNode* head){ s原创 2020-11-26 06:56:41 · 188 阅读 · 1 评论 -
算法打卡:力扣18 四数之和 c&&python实现
先前已经做过了两数之和,三数之和,现在到了四数之和,我在想有没有一个统一的方法可以针对k数之和去做,但是目前还没有找到一个适合与一个k数之和的方法(k>=2),今天先来看这道题目:题意明确,相信很多刷过一些算法的同学看到题目的时候就会反射般的想到双指针,可是四数之和不同于三数之和,我们怎么样去用双指针做呢。在做三数之和的时候我们可以通过锁定一个数字,在进行左界右界的确定,在确定的范围中,寻找这个数字,那么我们将之泛化到四数之和中,既然三数之和我们确定了一个数字,那么在四数之和中,我们确定两个.原创 2020-11-10 19:13:02 · 192 阅读 · 2 评论 -
二叉树的四种非递归遍历 c源码实现
二叉树的三种非递归遍历代码整体没有问题,若出现错误,可查询是否是环境的问题,比如在for循环中用 for(int i;i<n;i++)这种写法,在c99中允许,而c89是非法的,可通过设置编译器的环境选项更正。头文件与声明#include<stdio.h>#include<stdlib.h>#include<string.h>#include<stdbool.h>#define error(str) fprintf(stderr,"%原创 2020-11-05 19:02:36 · 271 阅读 · 0 评论 -
力扣78 :子集 c&python 及其详细解析
题目是一道中等题目,需要推一推才能有思路,我们直接开始。我们先来看一下各级数组的规律如果我们费脑筋去想的话,倒不如画个图更快,很容易我们可以看出,最左边为层数,最右边为子集的个数,中间就是他的子集,并且我们不难发现,[1,2]的子集就是[1]的所有子集,加上它每个子集加个[2],[1]的所有子集等于[]的所有子集加上,它的所有子集加上[1],很显然,这个规律是可以得到推广的,那么我们就能得到其递归的公式,之后用代码实现。c语言/*力扣78 子集:c 2020/10/6 00:36 by ksks14原创 2020-11-02 01:11:39 · 322 阅读 · 0 评论 -
力扣79:单词搜索 c语言 递归解法
示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = "ABCCED", 返回 true给定 word = "SEE", 返回 true给定 word = "ABCB", 返回 false解题思路:该题目与我先前做的马踏棋盘类似,一般情况下,做法为搜索,我写过一个解法,但是由于复杂度过于真实,我就不必要拿出来丢脸了。答案:bool _exist(char **boar.原创 2020-09-08 17:57:45 · 294 阅读 · 0 评论 -
力扣367:有效的完全平方数 c&&python
题目简单给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。说明:不要使用任何内置的库函数,如 sqrt。示例 1:输入:16输出:True示例 2:输入:14输出:Falsec解答1.利用完全平方数的性质 ,即:1=14=1+39=1+3+5.....等等代码:bool isPerfectSquare(int num){ if(num == 0) return fal原创 2020-09-06 22:47:19 · 158 阅读 · 0 评论 -
力扣:316. 去除重复字母 c语言实现 近双百
题目示例 1:输入: "bcabc"输出: "abc"示例二输入: "cbacdcbc"输出: "acdb"这里我们需要细品题目要求,可能会有人看不懂题目,不过没关系,这里可以用做一张图解释一下。思路:我们先将第一个字符填入子串,然后开始遍历,如果填入第二个字符时发现第一个字符大于第二个字符,且第一个字符在源字符串还存在,那么我们就将第二个字符覆盖第一个字符,接着我们将第三个字符放入子串,继续判断若符合同样的条件,则覆盖。我们放入第四个字符,若第三个字符不大于第四个字符,则,正常放原创 2020-08-19 11:45:57 · 679 阅读 · 0 评论 -
力扣 946:验证栈序列 c语言实现
题目:初看题目或许会迷茫,其实仔细理一理题意没有那么复杂。我们用例二来举例子,说明他为何是false。数组一:1 2 3 4 5数组二:4 3 5 1 2我们入栈 1 2 3 4 出栈 4 3入栈 5 出栈 5 这时候我们发现要出栈的元素为2 而不是1 ,因此不和规则。这点接触过栈的朋友应该都知道。思路:用数组模拟,用一个多余的数组来模拟栈,这样我们就可以对这个数组操作从而实现,对栈规则的模拟。代码/*利用数组模拟*/bool validateStackSequences(int* p原创 2020-08-11 17:15:40 · 331 阅读 · 0 评论 -
力扣268:缺失数字 python&&c
题目:题目简单,容易理解,直接上代码:哈希表所谓哈希表不需要记得特别复杂,稍稍了解一下,哈希函数其实就是一种通过关键字查询到位置的函数,而哈希表就是存了这些位置。如下↓int missingNumber(int* nums, int numsSize){//哈希 int *flag=(int*)calloc(numsSize+1,sizeof(int)); int re_int; for(int i=0;i<numsSize;i++){ flag[nums原创 2020-08-10 23:23:00 · 143 阅读 · 0 评论 -
力扣118:杨辉三角,c&&python
杨辉三角:给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。这道题目在力扣中属于简单题目。直接解答。int* getRow(int rowIndex, int* returnSize){ static int a[34][34];//全局变量二维数组 *returnSize = rowIndex + 1; int i, j; for (i = 0; i <= rowIndex; i++) a[i][0] = 1; f原创 2020-08-05 20:44:21 · 326 阅读 · 0 评论 -
力扣:字符串转化整数c&&python
请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下: 如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。 该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一原创 2020-08-03 22:01:19 · 168 阅读 · 0 评论 -
力扣:66&&3
周算法总结66:题目简单明确这里我总结两种方法。代码:int* plusOne(int* digits, int digitsSize, int* returnSize){ for(int i=digitsSize-1;i>=0;i--) { if(digits[i]<9) { digits[i]++; *returnSize=digitsSize;原创 2020-07-28 15:03:20 · 189 阅读 · 0 评论 -
力扣:7:整数反转 c&python
7. 整数反转给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321 示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-integer著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。c语言:通过不断的取模运算将每一位臻选出来int revers原创 2020-07-22 15:59:22 · 145 阅读 · 0 评论 -
C语言:力扣:628 力扣:817
628. 三个数的最大乘积给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:输入: [1,2,3]输出: 6示例 2:输入: [1,2,3,4]输出: 24看到这个题目的第一眼,便想到的是先降序排序,后直接将最大的三个数相乘,在细细思考之后,发现还需要考虑分情况,这里大致分为四种情况,排序之后:全为正:取下标012全为负:取下标012两正一负:取下标012两负一正:取下标0n-1n-2情况列出来之后我们发现其实总体只有两种计算方式,因此我们排原创 2020-07-21 15:39:06 · 239 阅读 · 0 评论 -
C语言:力扣:378. 有序矩阵中第K小的元素
给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15]],k = 8,返回 13。该题目在力扣中属于中等难度,因此确实是有些难到我了????,不过没事,最终在答案和思考的双重攻势下,还是搞出来了。这里我总共有两种方法1 放入一堆数组后排序开始的时候,我是直接暴力遍历放入数组原创 2020-07-18 20:14:11 · 332 阅读 · 0 评论 -
数据结构课设:迷宫问题(c语言版)
迷宫求解问题题目描述用一个m×n的矩阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对给定的迷宫,求出找到的第一条从入口到出口的通路,或得到没有通路的结论。我们指定:迷宫的入口为矩阵的左上角(1,1),迷宫的出口为右下角(m,n);路径的探索顺序依次为"东南西北"(即:右下左上)。输入第一行输入两个整数,空格间隔,分别表示矩阵的行数m和列数n;接下来的连续m...原创 2020-05-07 18:41:14 · 11879 阅读 · 15 评论 -
二叉树的平衡,AVL树,路过请点进来,拯救你的AVL[dogo]!
首先呢,本篇博文不会用也别冗杂的概念去讲解,也是为了找到最适合偏小白的讲法,所以会与书本上看到的东西有些许不同。AVL树基本概念首先,我们得知道AVL树这个东西,实际上,他就是一颗二叉树,但是他有限制条件(二叉树在上一篇数据结构博客已经讲过,要是觉得陌生,可以去传送门,重新温习一下。)开始帮我们不需要关注代码实现,需要搞明白各种原理否则代码实现会很困难。二叉树先前已经讲过,我们直接从带有...原创 2020-05-01 22:25:38 · 156 阅读 · 0 评论 -
数据结构:二叉查找树ADT的基本操作
二叉查找树的基本操作因为是尽可能的为了让小伙伴们都能看的明白,博主不会用冗杂的概念,品质保证,还请,多多关照。首先我们得知道二叉查找树是什么,它就是一种结构,只不过这种结构的重点应用在于查找,它也是一个二叉树。我们必须得清楚的一个性质:二叉查找树的一个节点的左节点中的元素,一定是小于该节点的元素的,而右节点的元素一定是大于该节点的。我们可以用图片来直观的反映(取自博客园walfud)这...原创 2020-04-21 19:58:15 · 470 阅读 · 0 评论 -
PTA7-1 螺旋方阵(15分)
题目代码博主都是亲测过的,还请大家,放心食用。先代码后解析。代码:#include<stdio.h>#include<stdlib.h>int main(){ int a[10][10],n,i,j,w1,w2,w3,w4,x=0,y=0,k=1,d=0; scanf("%d",&n); w1=n-1,w2=n-1,w3=0,w4=1; wh...原创 2020-04-19 18:57:38 · 637 阅读 · 0 评论 -
c语言:三种不同的方法实现约瑟夫环--循环链表,遍历数组,队列操作。
目录↓1.利用循环链表实现2.利用队列实现3.覆盖数组约瑟夫环问题引入:约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。好吧,这张图卵用没有????进入正题1. 利用循环链表实现约瑟夫环代码:/*约...原创 2020-04-19 00:37:42 · 3154 阅读 · 1 评论