数据结构与算法
数据结构是计算机存储、组织数据的方式,算法是解决问题的步骤和方法。
数据结构和算法是计算机科学的基础,它们的设计和优化直接影响到程序的效率和性能。
数据结构和算法的学习可以帮助程序员更好地理解和解决实际问题,提高编程能力和思维能力。
笑着的程序员
种树最好的时间是十年前,其次是现在
展开
-
数据结构与算法之排序(你不得不知道的排序算法)
这段代码实现了冒泡排序算法,其时间复杂度为On2。冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换的元素,也就是说该数列已经排序完成。在这段代码中,bubbleSort函数中的外层循环执行了n次,内层循环执行了n-1次,因此总的时间复杂度为On2。虽然冒泡排序的时间复杂度较高,但是它实现简单,对于小规模的数据排序效果还是不错的。原创 2023-05-15 23:12:31 · 223 阅读 · 0 评论 -
经典的大数的加法、减法、乘法及阶乘
大数加法题目简要描述:I have a very simple problem for you.Given two integers A and B,your job is to calculate the Sum of A + B.输入:第一行输入一个整数T(1<=T<=20)表示随后要输入的测试数字对的数目接下来T行,输入的是测试数字对输出:对于每一组测试数据,你应该输出两行,第一行"case #:",‘#’号代表输出的是第几组数据输出的第二行是一个等式"A+B=Sum",每原创 2020-06-09 00:30:03 · 821 阅读 · 2 评论 -
【华为OD机试真题 2022&2023】真题目录 已支持(C++&Java&python)100%通过率
已支持(C++&Java&python)100%通过率 超详细代码注释 代码深度解读原创 2023-04-05 23:57:23 · 7573 阅读 · 27 评论 -
关于datetime的用法整理
关于datetime的用法整理strptime的用法如上图所示,第一个参数可以是字符串strftime的用法strftime的第一个参数为datetime.datetimetimedelta的用法原创 2021-07-26 23:56:16 · 151 阅读 · 0 评论 -
关于装饰器的用法整理
关于装饰器的用法整理关于装饰器的一些基本的用法,请点击底部的链接学习!请设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间:import functoolsimport timedef metric(fn): @functools.wraps(fn) #把原始函数的__name__等属性复制到wrapper()函数中 def wrapper(*args, **kw): start = time.time() # 单位为 s原创 2021-06-06 10:28:53 · 107 阅读 · 0 评论 -
使用pytest分别从xlsx,json,csv及数据库中读取数据,以实现数据驱动
从xlsx中读取数据。原创 2021-04-15 22:58:02 · 291 阅读 · 0 评论 -
关于unittest中的类方法不能执行的问题说明
关于unittest中的类方法不能执行的问题说明如下图,刚开始类方法不能执行,在网上查了很久,有一个人说是pycharm的版本问题,当时竟然信了,然后针对这个问题使用VSCODE就可以了,今天在学习pytest的时候,才知道是选择的集成工具导致的,默认选择是下面红框里的,如果改选为unittests就没问题了!!!#-*- coding = utf-8 -*-#@Time: 2021/4/11 17:46#@Author : #@File : test02.py#@Software : PyC原创 2021-04-12 11:35:19 · 1116 阅读 · 2 评论 -
会议室日程安排问题(python贪心算法)
会议室日程安排问题(最少需要多少个会议室)按照贪心算法,此问题可以得到最优解!按结束时间排序,结束时间最早的前面不可能插入其他的议程。下面是完整的代码:class Program(object): def __init__(self, start, end): self.start = start self.end = enddef bestArrange(programs, start_time): """programs 为项目列表原创 2021-03-28 11:58:41 · 2371 阅读 · 0 评论 -
力扣上的两个全排列的题目
力扣上的两个全排列的题目题目描述: 给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]class Solution {public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int原创 2021-03-26 23:50:08 · 212 阅读 · 0 评论 -
快速排序方法及其应用(最小的k个数)
快速排序方法及其应用(最小的k个数)快速排序是一种比较好的排序方法,时间复杂度为O(nlgn)。快速排序方法中最主要的函数是Partition函数,Partition函数的作用是函数运行完之后,返回值位置及前面的数值都比后面的小,即如下代码中small位置及前面的 值都比small后面的值小。int Partition(int* number, int length, int start, int end){ if (number == nullptr || length <= 0 ||原创 2021-03-24 16:42:07 · 281 阅读 · 0 评论 -
单链表插入排序(C++)
单链表插入排序(C++)本题的难点在于,要给链表创建一个不赋值而只是为了方面插入的头节点#include <iostream>struct ListNode{ int m_Value; ListNode* p_Next;};ListNode* InsertSort(const int* numbers, int length){ ListNode* pNode = new ListNode();//一个不赋值的链表头 ListNode* pHea原创 2021-03-18 00:55:40 · 1620 阅读 · 0 评论 -
关于cin.peek()用法的总结
关于cin.peek()用法的总结cin.peek()的返回值是一个char型的字符,其返回值是指针指向的当前字符,但它只是观测指针停留在当前位置并不后移;如果要访问的字符是文件结束符,则函数值是EOF(-1)#include<iostream>using namespace std;int main() { int sum = 0; int c; while (cin >> c) { sum += c; while (cin.peek() == ' ') {原创 2020-08-25 21:58:51 · 7526 阅读 · 0 评论 -
关于二叉树四种遍历方式的核心代码
关于二叉树四种遍历方式的核心代码1、前序遍历//preOrder:void PrintInOrder(BinaryTreeNode* pNode){ if (pNode == nullptr) return; BinaryTreeNode* pCurrent = pNode; std::cout << pCurrent->m_Value << " "; if (pCurrent->p_Left != nullptr) PrintInOrder原创 2020-08-17 22:36:22 · 194 阅读 · 1 评论 -
关于vector赋值的问题总结(c++)
关于vector赋值的问题总结(c++)具体用法如下,其实有一点比较重要,就是可以中下面代码中std::vector<double>y(n);//给定vector大小这种形式在一定程度上代替数组,因为指定数组的大小必须要为常量,vector可以已有确定值的变量。#include <iostream>#include <vector>int main(){ int n; std::cin >> n; std::vector<double&原创 2020-08-16 18:47:31 · 1487 阅读 · 1 评论 -
关于sort使用方法的讨论(把数组排成最小的数)
关于sort使用方法的讨论(把数组排成最小的数)上次提及sort的用法是在华为OJ-奥运会排行榜C++当中,重新定义operator<()函数之后,使用sort(ranks.begin(), ranks.end());便生效了本文在此讨论sort的用法,是因为发现同样的方法在下面的这道题目上不好用了(原因暂不清楚)随后搞明白之后再做补充题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成原创 2020-07-18 12:28:41 · 285 阅读 · 0 评论 -
一篇文章带你对全排列从入门到精通
从n个数中选取m个数的组合及全排列题目描述:给定两个整数n、m,输出从(1,2,…,n)中选出m个数的所有组合。输入:每个测试文件含有多个数据,输入两个整数n,m(0<m<=n<=10)。输入到文件末尾结束。输出:输出对应的组合数,每个组合中的数字由小到大排列,对于每组数据的所有组合按字典序排序/下面这个组合代码能够满足字典排序输出#include <iostream>using namespace std;int n, m, lst[10] = {0};原创 2020-07-18 00:24:11 · 5017 阅读 · 1 评论 -
C++中关于count的用法总结
C++中关于count的用法总结下面是关于字符串中count的两种用法,STL容器,数组的用法类似#include <iostream>#include <string>#include <algorithm> //countusing namespace std;int main(){ string m = "1233445"; //int n = count(m.data(), m.data()+m.size(),'3'); i原创 2020-07-15 17:05:03 · 5800 阅读 · 1 评论 -
十进制、八进制、还是十六进制
十进制、八进制、还是十六进制整型常量1.八进制整常数八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7。八进制数通常是无符号数。以下各数是合法的八进制数:015(十进制为13) 0101(十进制为65) 0177777(十进制为65535)以下各数不是合法的八进制数:256(无前缀0) 03A2(包含了非八进制数码) -0127(出现了负号)2.十六进制整常数十六进制整常数的前缀为0X或0x。其数码取值为0 ~ 9,A~ F或 a ~ f。以下各数是合法的十六进制整常数:原创 2020-06-13 22:25:00 · 739 阅读 · 0 评论 -
最大公约数和最小公倍数的经典求法(C++)及例题实战练习
最大公约数和最小公倍数的经典求法(C++)最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数求最小公倍数算法:最小公倍数=两整数的乘积÷最大公约数辗转相除法#include <iostream>using namespace std;int main(){ int m, n, a, b, c; cout << "Input two i原创 2020-06-07 18:10:33 · 3281 阅读 · 1 评论 -
关于stringstream的用法总结
关于stringstream的用法总结将整形转化成字符串#include <iostream>#include <sstream>using namespace std;string i2s(int i, int len = 0){ stringstream ss; ss.width(len); //设置宽度 ss.fill('0'); //填充'0' ss << i; return ss.str();}int m原创 2020-06-02 21:16:41 · 2454 阅读 · 0 评论 -
合并两个有序数组C++
合并两个有序数组题目描述:有两个排序的数组A1和A2,内存在A1的末尾有足够的空余空间容纳A2。请实现一个函数,把A2中的所有数字插入到A1中,并且所有的数字是排序的。思路分析:从尾到头边比较,边移入正确的位置,时间复杂度为O(n)#include <iostream>using namespace std;void Combin2Array(int str1[], int length1, int str2[], int length2){ if (str1 == nullp原创 2020-05-30 22:45:15 · 1331 阅读 · 0 评论 -
codeblocks简单的背景及字体设置(及默认工作路径设置)
codeblocks简单的背景及字体设置(及默认工作路径设置)一、字体设置二、代码背景设置三、光标宽度及颜色设置四、左侧行号颜色、背景及行号与代码块之间背景设置五、默认工作路径设置最后效果...原创 2020-05-23 18:26:37 · 2608 阅读 · 3 评论 -
OJ简单的一个问题-输出表格
OJ简单的一个问题-输出表格第一行输出两个整数n, m,分别表示要输出的方格行数和列数,方格的行为"±–+"列为’|’输出为n行m列的方格代码如下:#include <iostream>#include <string>using namespace std;int main(){ int n, m; cin >> n >> m; string row{"+---"}; string column{"|原创 2020-05-21 22:07:35 · 194 阅读 · 0 评论 -
华为OJ-奥运会排行榜
华为OJ-奥运会排行榜第一行输入参赛国家数n;第二行至n+1行输入国家名字及金银铜牌数量,并以空格隔开;按照金牌数量、银牌数量、铜牌数量、国家名字母的优先级依次递减排序;主要是考察sort的用法#include <iostream>#include <string>#include <vector>#include <algorithm>using std::cin;using std::cout;using std::endl;原创 2020-05-18 23:02:39 · 768 阅读 · 1 评论 -
关于二叉树的构建及基本操作
关于二叉树的构建及基本操作struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};BinaryTreeNode* CreateBinaryTreeNode(int value);void ConnectTreeNodes(BinaryTreeNode* pParent, BinaryTreeNode* pLeft, BinaryTreeNode* pRight);vo原创 2020-05-17 20:44:55 · 129 阅读 · 0 评论 -
关于链表的构建及基本操作
关于链表的构建及基本操作struct ListNode{ int m_nValue; ListNode* m_pNext;}; ListNode* CreateListNode(int value); void ConnectListNodes(ListNode* pCurrent, ListNode* pNext); void PrintListNode(ListNode* pNode); void PrintList(ListNode* pHead); void Des原创 2020-05-17 20:42:19 · 198 阅读 · 0 评论 -
单链表的生成方法(C++)及单链表遍历一次中值查找
方法一:从前面插入LinkList *s, *L;int i;L = new LinkList();L->next = nullptr;for (i = 0; i < n; ++i){ s = new LinkList(); std::cin >> s->data; s->next = L->next; //每次都在L后面插入一个节点 L->next = s; }对应的完整代码如下:#includ原创 2020-05-15 08:02:32 · 885 阅读 · 0 评论 -
面向对象编程
面向对象编程面向对象编程的概念,个人觉得维基百科的解释还是比较准确、到位的维基百科面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序...原创 2020-03-29 23:01:26 · 75 阅读 · 0 评论 -
数据结构与算法——单链表
关于单链表的一个简单的题目以下程序输入一个整数n,再输入n个整数,以此按数据大小建立一个链表,再输出该链表所有节点的数据,然后删除整个链表。如输入5 33 88 55 77 11,则输出11 33 55 77 88。#include <stdio.h>#include <stdlib.h>typedef struct LNode{ int...原创 2020-03-29 11:30:41 · 245 阅读 · 0 评论