自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 收藏
  • 关注

原创 LeetCode——实现strStr()

int strStr(char * haystack, char * needle){int len=strlen(needle);if(len==0){return 0;}int i,j;int tmp=0;for(i=0;i<strlen(haystack);++i){if(haystack[i]==needle[0]){ tmp=i+1; for(j=1;j<len;++j) { if(haystack[tmp]==needle[j])

2021-06-30 10:55:12 314 1

原创 归并排序怎么写,看这里( MergeSort 和 _MergeSort )

//归并排序是将两个已经排好序的数列,以某一种顺序整合在一起的排序算法//前提是要有两个已经排好序的数列! //_MergeSort是MergeSort函数的一个子函数,通过不断地分治到单独的数上 //来为归并算法提供前提,使要归并的两个数列有序 //通过_MergeSort函数反复的递归调用来实现将一个无序的数列排好序 //tmp开辟出来的空间的作用是://将排好序的数列放到tmp开辟的空间中,然后再将tmp空间里的数列放到原数组中//实现了一个替换的作用void _Me

2021-05-24 22:14:12 567 2

原创 Leetcode——两种方案翻转二叉树(前序、后序)

//翻转二叉树struct TreeNode* invertTree(struct TreeNode* root){if(root==NULL){ return NULL;}//前序:自上而下struct TreeNode* tmp=root->left;root->left=root->right;root->right=tmp;invertTree(root->left);invertTree(root->right);retu.

2021-05-21 18:40:51 382 6

原创 经典数据结构——堆的实现(最全功能、包含TopK)

//创建一个堆的结构体typedef int HPDataType;typedef struct Heap{ HPDataType* _a; int _size; int _capacity;}Heap;void HeapPush(Heap* hp, HPDataType x);void HeapPop(Heap* hp);int HeapTop(Heap* hp);int HeapSize(Heap* hp);int HeapEmpty(Heap* hp);void .

2021-05-20 18:05:50 1034 5

原创 经典数据结构——二叉树的实现(前、中、后、层序、完全二叉树判断)

typedef char BTDataType; typedef struct BinaryTreeNode{ BTDataType _data; struct BinaryTreeNode* _left; struct BinaryTreeNode* _right;}BTNode; // 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树BTNode* BinaryTreeCreate(BTDataType* a, int n, int* pi);// 二叉树销毁v

2021-05-19 08:57:56 292 4

原创 C语言——循环队列源代码

#define _QUEUE_DEFAULT_SIAE 8typedef struct CycleSeqQueue{ ElemType *base; int capacity; int front; int rear;}CycleSeqQueue;void CycleSeqQueueInit(CycleSeqQueue *pcq, int sz = _QUEUE_DEFAULT_SIZE);void CycleSeqQueueShow(CycleSeqQueue *pcq);voi.

2021-05-15 18:00:55 684 4

原创 最完整的日期类的实现(满满的干货)

class Date{public:// 获取某年某月的天数int GetMonthDay(int year, int month){static int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int day = days[month];if (month == 2 &&((year % 4 == 0 && year % 100 != 0) || (..

2021-05-14 21:31:57 255 3

原创 经典排序——二路选择排序(同时选出最大和最小的数)

*二路选择排序是在选择排序的基础上进行的改进,在一次循环中同时选出最大和最小的数,分别放到序列尾和序列头,提高了排序的效率void SelectSort(int *a, int n){ int begin =0, end = n - 1; while (begin < end) { int mini = begin, maxi = begin; for (int i = begin; i <= end; ++i) { if (a[i] < a[mini]).

2021-05-12 20:11:26 599 4

原创 新出炉的希尔排序(面试必备)

*希尔排序是插入排序的优化版,在插入排序的基础上,大大提高了排序的效率是基于以gap为间隔形成的数列进行的预排序,gap从大到小,最终变成1,就是最直接的插入排序//1.预排序(接近有序)//2.插入排序void ShellSort(int *arr, int n){ int gab = n; while (gab > 1) { gab /= 2; //每次建议gap为2或者为3 if (gab == 0) { gab = 1; //执行gap=1的时候就

2021-05-12 19:41:34 263 2

原创 这就是大家想找的——topK问题,N个数找出最大(最小)的前K个数(逐方案优化)

有N个数,请找出最大/最下的前K个方案一:排序(比如堆排序),其时间复杂度为O(N+N*logN)但面试官要求:效率不够,请优化!所以,方案二:建大堆。删除最大的,调堆继续选,选出K个次大 O(N+K*logN)此时,面试官提高要求:N非常大,内存中放不下N个数,数据放在文件中所以,有了方案三:建k个数的小堆,时间复杂度为O(k+(N-K)*logK)特点:节省内存空间代码如下:void AdjustDown(heapA, k, i); //函数前置声明void

2021-04-23 16:13:46 652 1

原创 作为米粉,我不得不说一说小米11全系,小米还是最初的小米呀

要说去年到今年什么手机最香,要属小米11系列!!!从2020年到2021年,小米11的中杯,大杯和超大杯才终于凑齐,小米11,小米11Pro,小米11Ultra 这三款手机的虽然都长一个样,也都属于旗舰的配置,但是每款手机也因为定位的原因有所差别,价格也覆盖了3999-6999的区间,所以这篇博文,我想给大家略略的谈一谈这三款手机的区别。首先必然要展示一下这三款手机的样子啦首先我们可以看到从左到右依次是小米11,小米11Pro,小米11Ultra,三款机型的长宽相同,厚度略有差异。从外观上可以看出

2021-03-30 18:09:55 694

原创 大家期待已久的堆排序终于来了(堆的创建&&堆的排序)

#include <stdio.h>#pragma warning(disable:4996)//堆的实现//向下调整算法 前提:树的左右子树都是堆(大堆或者小堆),才能调整//此例为为小堆void Adjust(int *a, int n, int root){ int parent = root; int child = 2 * parent + 1; while (child < n) { //当右孩子存在,并且右孩子小于左孩子 //chil

2021-03-29 18:04:28 2318 6

原创 完整版通讯录源代码(2)——最全的功能(二进制文件写入与读取)

// contact.h#ifndef _CONTACT_H_#define _CONTACT_H_#pragma warning(disable:4996)#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <assert.h>#include <string.h>//person 内部元素的大小#define NAME_SIZE 32#d

2021-03-23 21:01:04 3739 2

原创 LeetCode——(两种思路)将字符串中的空格替换为%20

#include <stdio.h>#include <string.h>#pragma warning(disable:4996)思路1:遇到空格,就把后面的字符往后挪动两个位置。问题:效率不高,时间复杂度O(N^2),所以不选用思路2:先遍历一遍计算出有多少个空格,再从前往后挪数据,把每个字符一步挪到位,每个字符挪 spacenum*2 位.遇到空格以后填%20,然后spacenum--;时间复杂度为O(N);选用思路2代码如下:void .

2021-03-21 11:24:23 475 3

原创 通讯录源代码(1)(包含文件操作——文件写入和读取)(文本文件)

//contact.h#pragma once#pragma warning(disable:4996)#include <stdlib.h>#include <stdio.h>#include <Windows.h>#include <assert.h>#include <malloc.h>#include <string.h>#include <errno.h>#define NAME_MAX

2021-03-18 22:31:23 2108 2

原创 LeetCode——数组形式的整数加法---源代码

#include <stdio.h>#include <malloc.h>#pragma warning(disable:4996)int *addToArrayForm(int *A, int ASize, int K, int* returnSize){ int num = K; int size = 0; while (num) { size++; num /= 10; } int n = size > ASize ? size+1 : AS

2021-03-16 17:58:59 356

原创 经典排序算法——最易懂的快速排序介绍

#include <stdio.h>#pragma warning(disable:4996)void quicksort(int *arr, int left, int right){ //要有递归的控制判断 if (left>right) { return; } //否则的话,如递归所有控件路径,函数将导致运行时堆栈溢出 int l = left; int r = right; int key = arr[left];//找第一个数为基准数

2021-03-07 21:43:39 410 4

原创 素数求法的四种方法(逐次优化)

/*思路:素数:即质数,除了1和自己之外,再没有其他的约数,则该数据为素数,具体方式如下*/ //方法一:试除法int main(){ int i = 0; int count = 0; // 外层循环用来获取100~200之间的所有数据,100肯定不是素数,因此i从101开始 for(i=101; i<=200; i++) { //判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数 int j = 0; fo

2021-03-04 22:43:52 5018 1

原创 LeetCode——合并两个有序数组(归并排序变形实例)

归并排序是将两个排好序的数组合并到一个新的数组中去,而此题是将后一个小数组归并到前面一个大数组中去,仅此差异。void merge(int *nums1, int nums1Size, int m, int *nums2, int nums2Size, int n){ //判断数组是否为空 if (nums1Size == NULL || nums2Size == NULL) { return; } int k = nums1Size - 1;//k为nums1数组的最

2021-02-12 23:10:02 711

原创 最简单的动态规划——青蛙跳台阶问题和青蛙变态跳台阶问题

1.青蛙跳台阶问题:有一个台阶有N阶,青蛙可以一次跳一阶,也可以一次跳两阶,那么跳到第N阶总共有多少种跳法?假设跳到第N阶的跳法为f(N)那么可由规律得到:f(N) = f(N - 1) + f(N - 2);…f(1)=1f(2)=2这与求斐波那契数列相似,这样可以套用求斐波那契数的代码而要注意的是青蛙跳台阶问题里,f(1)=1,f(2)=2;要将部分数值改变,才可套用此代码long long Fibnacci(size_t N){ if (N < 2) {

2021-02-11 10:55:42 938

原创 数据结构->线性表->顺序表基本代码

#include <stdio.h>#include <stdlib.h>#include <assert.h>#pragma warning(disable:4996)typedef int SLDatatype;typedef struct SeqList{ SLDatatype *a; int size; int capacity;}SeqList;void SeqListInit(SeqList *ps1){ assert

2021-02-10 09:36:15 519 1

原创 LeetCode——两种方法实现反转链表(逆置链表)

**反转链表**:实现链表的逆置最终将头结点转为尾结点,尾结点转为头结点/*struct ListNode{ int val; struct ListNode *next; }*/ListNode *reserveList(struct ListNode* head){//如果头结点为空或者只存在一个头结点,则直接返回头结点指针 if(head==NULL||head->next==NULL) { return head.

2021-02-06 11:39:22 1505 4

原创 两种思路——leetcode删除排序数组中的重复项(去重)

给定一个排序数组,要求在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。要求:不能使用额外的数组空间,必须在原地修改**输入数组**,并在使用O(1)额外空间的条件下完成。1.int removeDuplicates(int *nums,int numsSize){ assert(nums); if (numsSize< 2)//当数组中元素个数少于2时,返回元素个数 { return numsSize; } int dst = 0, sr.

2021-01-29 12:17:57 551 1

原创 微软编程之美面试题——统计二进制中1的个数

/*方法一:思路:循环进行以下操作,直到n被缩减为0: 1. 用该数据模2,检测其是否能够被2整除 2. 可以:则该数据对应二进制比特位的最低位一定是0,否则是1,如果是1给计数加1 3. 如果n不等于0时,继续1*/int count_one_bit(int n){ int count = 0; while(n) { if(n%2==1) count++; n = n/2; } return count;} /*上述方法缺陷:进行了大量的取

2020-12-31 11:19:23 634 2

原创 【C语言 】——前置++,后置++,逗号表达式综合使用

#include <stdio.h>int main(){ int a, b, c; a = 5; c = ++a; // ++a:加给a+1,结果为6,用加完之后的结果给c赋值,因此:a = 6 c = 6 b = ++c, c++, ++a, a++; // ++c:c为7 c++:c值不变 ++a:a的值为7,a++:a值不变,b取a的值:7 // 表达式结束时,c++和a++会给a和c分别加1,此时c:8,a:8,b:7 b += a+

2020-12-31 10:21:35 1006

原创 【C语言】——猜数字游戏源代码+打印结果

void Menu(){ printf("*********************************\n"); printf("****** 1.plat 0.exit *****\n"); printf("*********************************\n");}void Game(){ int x; int num; x = rand() % 100; while (1) { printf("请输入一个数:"); scan

2020-12-31 10:03:50 729

原创 浅谈rand和srand

srand和rand()配合使用产生伪随机数序列。rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值

2020-12-31 09:47:47 873

原创 oj题多组输入测试——实现多组字符串输入后进行逆序

*思路:该题比较简单,请参考代码*/void Reverse(char* str){ char* left = str; char* right = str + strlen(str)-1; while(left < right) { char temp = *left; *left = *right; *right = temp; ++left; --right; }}

2020-12-30 21:52:47 1129

原创 求0~100000的所有水仙花数——思路分析+源代码

*思路:此题的关键在于只要知道判断一个数据是否为水仙花数的方式,问题就迎刃而解。假定给定一个数据data,具体检测方式如下:1. 求取data是几位数2. 获取data中每个位置上的数据,并对其进行立方求和3. 对data中每个位上的数据立方求和完成后,在检测其结果是否与data相等即可,相等:则为水仙花数否则:不是具体实现参考以下代码。*/int main(){ int i = 0; for(i=0; i<=999999; i++) { int count = 1;

2020-12-30 21:44:56 1006

原创 求数组的长度 && strlen求长度

char acX[] = “abcdefg”;char acY[] = {‘a’,’b’,’c’,’d’,’e’,’f’,’g’};A.数组acX和数组acY等价B.数组acX和数组acY的长度相同C.数组acX的长度大于数组acY的长度D.数组acX的长度小于数组acY的长度acX和acY都是字符数组,但是初始化表达式不同,acX和acY的区别如下:acX:数组中总共有8个元素,分别是:'a','b','c','d','e','f','g','\0'acY:数组中总共有7个元

2020-12-30 21:22:47 5689

原创 浅谈杨辉三角(实现三角阵打印)与杨氏矩阵(实现杨氏矩阵查找)

●杨辉三角算是数学里面的概念.但程序题中也时常出现。什么是杨辉三角?每行数字左右对称,由1开始逐渐变大。每个数字等于上一行的左右两个数字之和即每个数等于它上方俩数之和。下面就是杨辉三角的代码和打印结果首先先初始化第一列的元素都是1,然后按照每个数等于它上方俩数之和的规律,依次计算得出每一行的数,就可得到杨辉三角。int main(){ int str[30][30] = {0}; int i, j; int n; printf("请输入一个数:"); scanf("%d

2020-12-27 23:26:08 945

原创 打印一个我们熟知的乘法口诀表!

一个很简单的打印!int main(){ int i, j; for (i = 1; i<=9; i++) //外循环改变乘数 { for (j = 1; j <= i; j++)//内循环从1开始相乘,直到i { printf("%d*%d=%2d ", i, j, i*j);//注意格式,使最终打印对齐 } printf("\n"); } printf("\nGood job! \n"); return 0;}...

2020-12-27 10:47:54 558

原创 说一说 new/delete&&malloc/free

###在C语言中,我们认识到了malloc函数与free函数,这两个函数是有关开辟动态内存的在之前的博客里,我详细的介绍了动态内存函数;https://blog.youkuaiyun.com/cfk17829572643/article/details/110183105而C++中,我们也认识到了new和delete,会发现,它俩与前面的两个函数有着一些相似的地方,但也有着一些不同。●首先 new/delete是C++的操作符,而malloc/free是C中的函数。●其次 new不但会分配内存,还会调

2020-12-26 09:33:28 518

原创 char* 定义的字符串为什么修改不了?(char *最好还是写成 const char *)

###我们或许都知道char型数组与char* 都能够用来定义字符串,但可能不清楚char*定义字符串有着不一样的地方。用char* 来定义一个字符串,当我们试图对字符串的内容进行改动,即直接进行改动,或进行传参,在子函数中进行改动。都改动失败,而用char型数组定义的字符串进行改动操作则成功。●原因是什么:由于char型数组是一段连续的存储空间,所以内容是可以改变的而char *定义的字符串存储在字符常量区,是不可以修改的。我们知道char*用来定义一个指针变量时,指针变量是可以改变

2020-12-25 21:00:03 3026

原创 C++中文件开头写的 using namespace std 有什么作用?

##C++的STL都是定义在std命名空间中的,using namespace语句的作用是提前声明要引用的命名空间,这样在引用命名空间中的名称是就不需要加命名空间前缀。例如,如果不用using namespace std;那么在引用cin的时候,就需要写成std::cin##...

2020-12-25 18:45:32 2096 2

原创 C头文件与C++头文件区别

##标准的C++头文件没有.h扩展名,将以前的C的头文件转化为C++的头文件后,有时加上C的前缀表示来自于C,例如cmath就是由math.h变来的##

2020-12-25 18:32:22 1220

原创 说一说数组指针与指针数组

●数组指针所谓数组指针就是指向一个数组的指针int(*arr)[5]; int a[5]; arr = &a; //arr数组指针指向a数组的起始地址 printf("&a[0]: %p\n", a); printf("&a : %p\n", &a); printf("arr : %p\n", arr); printf("arr+1: %p\n", arr + 1);//指针加1,加上所指内容类型的大小 printf("&a[0]+1: %

2020-12-23 22:25:19 543

原创 10*10规模最新扫雷源代码+打印结果

●mine.h#ifndef _MINE_H_#define _MINE_H_#include <stdio.h>#include<stdlib.h>#include <time.h>#include <Windows.h>#pragma warning(disable:4996)#define ROW 12#define COL 12#define NUM 20void Game();void InitBoard(char

2020-12-22 16:21:22 1645 3

原创 最新三子棋游戏源代码+打印结果

#include <stdio.h>#include <stdio.h>#include "chess.h"void Menu(){ printf("#####################################\n"); printf("# 欢迎来到我的三子棋游戏室! #\n"); printf("#####################################\n"); printf("# 1.Play

2020-12-20 12:32:40 526 2

原创 超级好懂的——(浅谈)动态内存管理+动态内存函数+错误案例分析+经典笔试题

在这里插入代码片```在栈上开辟的空间一般都是临时的而在堆上申请的空间要有程序员去管理(申请和释放)在堆上申请的空间,只要你能找到它,就能使用它malloc 申请内存空间时,只是把内存空间申请给你,但是空间里面的内容并不做任何修改,也就是说空间内容是随机的,申请好了,返回值为堆空间的起始位置malloc开辟空间,只分配空间,不做初始化但实际给你的空间要比你申请的空间要多一点点所以free的空间要比申请的空间要大一些,多出来的空间不是给用户用的,是给系统进行管理的free(ptr)

2020-12-09 16:24:28 606 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除