11 2023 档案
摘要:二分查找 二分查找,一般是在一个有序的数组上的,但不一定要在一个有序的数组上(比如寻找峰值问题),总之只要可以确定答案在某一个区间,就可以使用二分查找。 寻找峰值 力扣题目链接 解题思路 如果数组的大小是1,根据题目的要求,它一定就是峰值,直接返回 判断下标0和下标n - 1是不是峰值,如果是直接返
阅读全文
摘要:堆 堆是一种完全二叉树,也是一种优先级队列堆分为大根堆和小根堆,大根堆即对于每一颗树,它的父亲节点的值,一定大于它的孩子节点的值,左右节点的值不用管它的顺序。小根堆同理。 写了一道可以用堆这种数据结构求解的题目,即找数组中第k大的数,要求时间复杂度为O(N)。 力扣题目链接 解题思路 根据堆的定义我
阅读全文
摘要:KMP算法 字符串查找算法中的经典算法,时间复杂度O(N + M),N是主串的长度,M是字串的长度。 int* get_next(char s[], int len) { int* next = (int*)malloc(sizeof(int) * len);//netx数组的长度跟s2的长度一样
阅读全文
摘要:1. 问题H:【C语言训练】排序问题<1> 1.1. 解题思路 题目已经告诉你了,用排序 1.2. 解题方法 1.2.1. 冒泡排序 #include <stdio.h> #define N 10 void bubberSort(int *a, int size);//冒泡排序,升序,即按从小到大的
阅读全文
摘要:微积分的主要研究:事物运动中的数量的变化规律 微积分分为两大类 微分学(导数) 积分学(积分) 主要研究两种变化 均匀变化(用初等数学可以解决) 非均匀变化(用高等数学来解决) 还有两个侧面 宏观(局部,微分学,用来研究事物在某一时刻的变化率) 微观(整体,积分学,用来研究事物整体的改变量) 微积分
阅读全文
摘要:今天刷题的时候碰到了一个问题,这个问题有点难,想了半天还是没有想出来,最后去查的题解,发现解决这道题需要用到一个数学上的原理 容斥原理。 如果用正常的思维去写这个题目就会超时,因此我们就使用容斥原理来求解。 设集合A的是2的倍数,集合B是3的倍数,集合C是5的倍数。 那么我们要的答案就是集合A和集合
阅读全文
摘要:1. 浮点数的精度问题 在计算机中,浮点数不能像整数一样精确的表示出来,存放的是它的近似值。 例如,存放0.3在计算机中可能是0.2999999999,或者是0.3300000001。 这种情况会对比较操作进行干扰,==这个运算符就不对了(在c/c++中"=="要完全相同才是true),所以我们需要
阅读全文
摘要:1. 问题A:LY学长的随机数 解题思路 第一种思路是先去重后排序 第二种思路是先排序再去重 解题方法 暴力遍历 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #i
阅读全文
摘要:1. 动态规划 在我看来动态规划就是用一种缓存机制来保存之前求解的答案,如果要再次用到已经求解过的答案就直接把缓存里面的答案给他而不必再次求解,也就是用空间换取时间 那么要解决动态规划问题,最好按照以下步骤来求解 用暴力递归来求解问题 能用记忆化搜索就先用记忆化搜索来优化递归,时间复杂度是O(N)
阅读全文
摘要:排序 归并排序 本质是将多个序列进行合并,和快排一样也用的是分而治之的思想,并且它也是基于比较里面较快的算法且能保持稳定性的算法。 那么怎么将两个序列合并呢?(假设左右两边已经有序) 开辟一个和数组一样大的辅助数组,再设定两个指针,第一个指针指向第一个序列的开头,第二个指针指向第二个序列的开头。 升
阅读全文