基础算法题练习
文章平均质量分 62
我是py呀
py_学习,发布一些我在学习中遇到的问题和经验总结,大家一起学习呀~
展开
-
力扣50号算法题Pow(x, n)。快速幂的递归与位运算实现及扩展题372. 超级次方
问题:力扣50. Pow(x, n)题目就是 力扣: 50. Pow(x, n): https://leetcode-cn.com/problems/powx-n/解法一: 直接暴力for循环:就是通过for 循环 O(n) 时间复杂度,不断的进行累加, 会出现超时。// 暴力破解,O(n) 迭代func myPow(x float64, n int) float64 { // 如果指数小于 0,那么将底数变为对应的 if n < 0 { x =原创 2021-12-07 21:04:17 · 393 阅读 · 0 评论 -
红黑树的应用与力扣456号算法题132模式详解,go语言解题
红黑树实现(力扣官方代码),以及详细的力扣 132模式这道题的解答和推算过程原创 2021-12-02 14:54:20 · 1070 阅读 · 0 评论 -
go语言简单实现 前缀树(Trie)与了解基数树(Radix-Tree)
目录结构Trie Trie.gomain.goTrie 的实现实现写法, 可以参照模仿 container/list 双向链表的写法实现下面代码中使用的是 slice 存储子节点, 线性查找遍历, 后面会进行 hash优化。package Trie// 字典树:/* 1. 单词结尾表示:需要使用一个 bool 类型,辨识当前节点是否是结尾字符 叶子结点是 单词结尾 非叶子节点 也可能是单词的结尾 2. 实现功能 增加单词 搜索单词*/// 定义树的节点原创 2021-11-19 09:31:07 · 1631 阅读 · 0 评论 -
Python3,手写一个堆 及其 简易功能,并实现优先队列,最小堆任务调度等
大家可以查看我这篇文章中对堆和堆排序的描述:python实现10大排序算法详细介绍及排序思想介绍!这是官方文档下面是堆实现了四种方法:(1)heapify: 将数组调整为堆(2)heappop: 删除堆顶元素(3)heappush:向堆中添加元素(4)heapSort: 堆排序(5) 另外我实现的是大根堆,官网是小根堆,且下标都是从0开始。代码展示:class Heapq: """ 生成大根堆 """ def __HeapAdjust(原创 2021-08-04 10:48:04 · 682 阅读 · 0 评论 -
详细讲解:Python中二进制以及数值的特殊性,在位运算中需要注意的点
我对python大整数的实现,点击查看在之前的文章,我实现过Python的大整数,可以说,在python中是没有数值类型这一说的, 你可以为一个变量赋值为上千亿,也不会出错。 没有了 如java中的int, short, byte等对位数的限制。已知int由四个字节表示,那么就有4X8 = 32位 可以表示的范围就是 -2^31 到 2^31 -1。但是在Python中# 参考大整数的实现,Python中的十进制是没有限制的。>>> a = 1000000000000000000原创 2021-07-07 15:58:55 · 903 阅读 · 0 评论 -
python实现10大排序算法详细介绍及排序思想介绍
什么是排序?排序是按关键字的非递减或者非递增顺序对一组记录重新进行排列的操作。(1)排序的稳定性通俗地讲,就是排序前 Ri 在 Rj前面,排序后Ri仍领先于Rj, 则说明是稳定的。(Ri<Rj)(2)内部排序与外部排序(3)内部排序方法的分类(4)待排序记录的存储方式一般为顺序存储结构或者是链式存储结构(5)排序算法效率的评价指标一.插入排序(1)直接插入排序"""直接插入排序:采用将r[i]与r[i-1], r[i-2],...,r[1],从后向前的进行原创 2021-04-06 21:27:38 · 559 阅读 · 0 评论 -
递归讲解与递归实现列表的反转
递归:特点:当一个复杂的问题可以分解为几个(最简单的就是一个)相对简单的且与原来问题解法相同或者类似的子问题来求解,便称为递归求解。:递归工作栈与递归过程:在高级语言中,调用函数与被调用函数之间的链接及信息交换需要通过栈来进行。字数太多,我们直接上图:递归算法的效率分析:时间复杂度: 大致为O(2^n) (斐波那契以及汉诺塔问题)空间复杂度: O(f(n)) ,f(n) 为递归工作栈中记录的个数与问题规模n的函数关系。分治法:一种分解-求解的策略,叫做分治法,用来求解递归原创 2021-04-01 18:13:59 · 3465 阅读 · 0 评论 -
Python字典hash表的模拟实现
本文学习自:《Python 源码深度剖析》感谢作者的传授若还不清楚字典的知识, 详细内容和知识点可点击了解功能主类(字典):PyDictObject(1) add_entry(self, key, value) : 添加元素(2)del_entry(self, key) : 删除元素(3) hash_list : (属性),可以遍历底层hash数组(4) entry_list: (属性),遍历底层键值对数组(5) 可通过简单的 for循环迭代,很方便pd = PyDictOb原创 2021-03-30 12:26:18 · 527 阅读 · 2 评论 -
模拟python底层数据类型,大整数的实现!
我们参考C源码的逻辑,试着用python去模拟一下大整数的实现,这里 只实现了加减法的操作。(感谢作者的专栏,收获很大,参考 慕课网:《Python 源码深度剖析》)(1)类: Int32()这是设计出来的,用来模仿 int类型 4字节的整形数据。定义了加减乘除4个基本运算利用数据描述器,对数据进行限制。最大的取值只有 -2 **31 到 2 **31 -1当运算结果大于 这个范围,便会抛出异常,提示你 整数溢出提供一个转换函数,当结果取值大时, 转换为 大整数类型进行计算(PyLongO原创 2021-03-10 16:52:18 · 827 阅读 · 0 评论 -
判断 矩阵对角线元素相等
看题目:已知矩阵:_matrix = [[1, 2, 3, 4], [5, 1, 2, 3], [9, 5, 1, 2]]如该矩阵,对角线上的元素相等,则输出 True,否则输出 False下面上代码def is_toeplitz_matrix(matrix): line_nums = len(matrix) per_line_nums = len(matrix[0]) col = 0 while col < per_line_nums -1: # 4原创 2021-03-05 18:03:57 · 2089 阅读 · 0 评论 -
静态链表和动态链表的创建使用 C语言与python实现
题目,以录入三个学生的成绩,学号为目的,创建链表(1)C语言(静态链表)// 静态链表/* 所以的节点都是在程序中定义的,不是临时开辟的, 也不能在用完后释放空间,这种称为静态链表*/# include <stdio.h>// 声明结构体struct Student{ long int num; float score; struct Student * next; // next 指针};int main(){ //原创 2021-02-01 10:59:10 · 463 阅读 · 0 评论 -
汉诺塔问题(Hanoi) C语言与Python实现
上 题目与分析:截取自C语言书籍中,详细的题目描述及解题分析C语言实现:尝试过自己解题,但是始终还是琢磨的不是很到位。总结一下主要是有两点(1) 去发现规律,想着去用递归,然后如何代码实现递归(2) 其中 叙述的 A B C,三个塔, 有两个过程, (1)A 借助 B 向 C ,(2) B 借助 A 向 C。 都可以抽象为 一个借助 另一个,向 另另一个三者的关系~ 这也将两种情况抽象的实现为一种,一个函数解决,我没想到这样下面是书中的解题代码// 汉诺塔问题#inclu原创 2021-01-20 13:32:14 · 298 阅读 · 0 评论 -
输出魔方阵,C语言与Python实现
上题目就是横竖斜的值相加相等规律:1.第一行中间一列的值为1。所以用j=n/2+1确定1的列数,得出a[1][j]=1。2.每一个数存放的行比前一个数的行数减1,列数加1。行数用i=i-1确定,列数用j=j+1确定。3.如果一个数行数为第一行,则下一个数行数为最后一行。4.如果一个列行数为最后一列,则下一个数列数为第一列。5.如果按上面的规则确定的位置上已有数,或上一个数是第一行最后一列,则把下一个数放在上一个数的下面。解法:利用二维数组表示实现将上述五原创 2021-01-19 20:12:47 · 1504 阅读 · 1 评论 -
超细节讲解杨辉三角!C语言与Python实现
33原创 2021-01-18 21:22:50 · 372 阅读 · 1 评论 -
输出菱形图案C语言与Python实现
上题目:要求, 输入菱形的宽 n,表示最宽地方的 * 个数,例如下图 n = 7C语言实现技巧:(1) 将菱形(如上图)分开为 上三角形,和倒三角形实现。(2) 分别找到 每行输出 空格 与 * 号的规律#include<stdio.h>int main(){ int n, m, c, i; printf("请输入*号的个数,代表菱形宽度:\n"); scanf("%d", &n); //打印上三角形 for(i=1; i<= (n + 1)原创 2021-01-17 20:53:46 · 1270 阅读 · 2 评论 -
水仙花数C语言与python版
水仙花数就是 100-1000 以内的三位数,例如:153 = 111 + 555 + 333 这样的数叫做水仙花数。C语言实现过程很简单,穷举,一个一个数字的循环试// 水仙花数#include <stdio.h>#include <math.h>int main(){ int b, s, g; for(int num = 100; num < 1000; num++) { b = num/100; s = num/10%10; g原创 2021-01-17 13:26:47 · 344 阅读 · 1 评论 -
翻译密码(简单的 大小写英文字母后移四位,其他字符不变)C语言与Python版本
题目及分析上图片~~~c语言实现(利用ASCLL码)// 译密码: 使用ASCLL码,转换#include <stdio.h>int main(){ // 1. 首先接收字符,我把它定义为 str,因为输出类似一个字符串 char str; printf("请输入要进行转换的一段话(英文字母加字符:)\n"); str = getchar(); while (str != '\n') { // 2. 判断是否为 a-z,A-Z ,不是就不动 if ((st原创 2021-01-16 17:18:46 · 4158 阅读 · 3 评论 -
斐波那契数列实现C与python版
Fibonacci数列:就是前两个数为1, 从第三个数字开始,该数字是前两个数字得和。c语言实现很简单,就是设置三个变量,依次循环,第三个变量等于前两个变量的和。// c语言实现斐波那契数列:计算第n个斐波那契数的值#include<stdio.h>int main(){ int n; long int f1=1, f2=1, f3; printf("请输入想要的斐波那契数(n>=3):\n"); scanf("%d", &n); for(int原创 2021-01-16 15:06:08 · 580 阅读 · 1 评论 -
素数判定C语言与python
题目:对任意一个大于3的数,判断它是否是素数分析:(1) 素数:除了1和本身,不能被任何其他数整除(2) 假设数字是 n, 只用检测是否被 2 ~ n/2 整除即可(甚至是只需要判断到 2~根号n)。C语言解题第四步写起来还是比较乱的,要判断定 3,4,5 这几个小的数字。仅个人思路写法并且要注意类型转换 (int)n/2#include<stdio.h>// 素数判定int main(){ // 1.获取n的值 int n, i; print原创 2021-01-15 11:19:16 · 185 阅读 · 2 评论 -
判断一年是否为闰年(C语言与python)
题目:2000-2500年之间的每一年是否为平年,并将结果输出:试题分析1.能别四整除,但是不能被100整除的都是年份是闰年2 能被四百整除的是闰年这种简单的题就是考察最基本的算法思路,也就是解决问题的思路,用最基本的循环语句就可以实现,但也要清晰的知道怎么去写 if else语句,在哪里嵌套,都要表示清楚。最直观的方式,就是利用集合的概念,将思路理清。这样if else的书写清晰,过程弄清楚。再开始写几行代码,不会花两分钟时间。C语言解题#include<原创 2021-01-15 09:33:04 · 1944 阅读 · 6 评论