![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
可拟雀
这个作者很懒,什么都没留下…
展开
-
对回流和重绘的理解
什么时候会发生回流呢*在所作的改变不影响元素的位置和元素的类别(激活伪类)其他情况下视为重绘特别要说的是,回流的时候当前节点的父元素和跟随它的子元素也都会回流原创 2021-11-25 18:45:34 · 106 阅读 · 0 评论 -
对于剑指 92 粉刷房子的理解
假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的正整数矩阵 costs 来表示的。例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。请计算出粉刷完所有房子最少的花费成本。原创 2021-10-07 11:33:16 · 56 阅读 · 0 评论 -
对kmp的一些感悟
看了许久的kmp,知其然也不知其所以然就很难受…对于失败函数来说,就是遍历每一个字符j,让以j为结尾的后缀字符串等于以0开始的前缀字符串的最长的长度 例如abcabmgk,j=4时候,最后的ab=最前的ab,所以 f(4)=2那么这个失败函数有什么用呢,我们知道朴素的算法来说,待匹配串需要模式串去一个一个的用模式串的首字母去对齐待匹配串的每一个字母,但引入失败函数后我们能做的就是通过查找现在匹配失败的元素的前一个元素g 的 f[j-1],然后就把模式串的前缀和g一样的抽过来对齐abcdabcggh原创 2021-10-04 09:57:21 · 113 阅读 · 1 评论 -
一些小随笔
1.逆转链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* reverseList(ListNode* head) {//定义:反转该链表并输出反转后链表的头节点原创 2021-09-20 20:34:49 · 252 阅读 · 0 评论 -
Bag_Problem
表格a【i】【j】表示的是容量为j的背包装入前i个物品的最大价值。拿a【1】【3】和a【2】【3】举例,这里的a【2】【3】意思并不是在a【1】【3】的基础上考虑第2件物品,而应该理解为再拿一个空背包考虑前两件物品的情况。因此,如果空间不足以放入第2件,那么a【2】【3】=a【1】【3】;如果空间足够放入第2件,那么将背包容量减去第2件的容量,得j=3-3=0,而i=2-1等于1,找到a【1】【0】=0,那么物品2价值加上a【1】【0】得到总价值4,将4与a【1】【3】比较,取较大值即为a【2】【3】的值。原创 2021-03-29 20:27:55 · 84 阅读 · 0 评论 -
理解快速排序
1.把a[0]放在合适位置2.把它两边再去快速排序关于1,见算法课那里,然后偶数次排说明a[0]在左,所以保证和最后边那些比都小于所有右边下表–,然后如果交换奇数次,a[0]就在右边,保证比左那些都大然后左下表++...原创 2021-02-25 13:57:06 · 88 阅读 · 0 评论 -
关于回溯--用自然语言理解再搞事情
1.输入 输出 做了什么 2.假设有了更小规模函数,来变更大函数 在这里dfs作用是选出第step到n位的数并且打印2.现在这次第一位选了什么的给进去然后dnf(step+1)就是选出step+1 到最后一位并且打印,所以已选好一个组合了,这时候要把我们在第step位选的i拿回来,进入下次循环从i等于2开始,1应该是可以用的,你可以手动自然按人类方法排一下3.代码如下/*全排列问题*/#include<iostream>using namespace std;int a[10],bo原创 2020-12-24 07:33:43 · 92 阅读 · 0 评论 -
关于旋转一个矩阵的问题
旋转的本质是什么?不就是翻转吗,比如一维数组来循环右移问题,可以视为翻转如下原创 2020-12-19 11:20:13 · 100 阅读 · 1 评论 -
指针函数,返回指针的运用
#include<stdio.h>int *MAX(int a[],int N);int *MIN(int a[],int N);int main(){ int N=0; printf("Enter the sum of the numbers:"); scanf("%d",&N); int a[N],i; printf("Enter numbers:\n"); for(i=0;i<N;i++) { .原创 2020-12-16 07:52:25 · 145 阅读 · 0 评论 -
百分之d之打印
原创 2020-12-15 11:10:41 · 263 阅读 · 0 评论 -
用递归实现求字符串里
//递归实现求字符串里数字相乘(注意可以有字母)int digui(char m[],int sum,int xiabiao,int j){if(xiabiao==j) return sum;//如果下标是j-1就返回,那么最后一个m[j-1]可不会被算进去if(m[xiabiao]<=‘9’ && m[xiabiao]>=‘0’)return digui(m,sum*(m[xiabiao]-‘0’),xiabiao+1,j);else return digui(原创 2020-12-13 23:39:57 · 162 阅读 · 0 评论 -
如何看别人代码
1.看到每一个新变量,看他在哪里用得到2.原创 2020-12-13 23:17:04 · 2442 阅读 · 1 评论 -
辅助数组的运用之pat3n+1猜想
#include <stdio.h>int vis[10000 + 5];void push(int x) {if(!vis[x]) {vis[x] = -1;}do {if(x%2 == 0) x /= 2;else x = (3*x+1)/2;vis[x] = 1;}while(x != 1);}int main() {int K, i; scanf("%d", &K);for(i = 1; i <= K; i ++) {int n; scanf(原创 2020-12-13 23:05:32 · 82 阅读 · 0 评论 -
关与指针与二维数组的理解与运用
//写一个冒泡排序,再返回j/2值,写一个findmax,在二重#include <stdio.h>int i, j;int findmax(int arr[][100], int m, int n, int i, int *p){int k;int cnt, max = -20000;for (k = 0; k <= n - 1; k++){if (arr[i][k] > max){max = arr[i][k];*p = k; //下标 ,找到最大的列}原创 2020-12-13 22:54:23 · 80 阅读 · 0 评论 -
指针数组运用
#include<stdio.h>#include<stdlib.h>#include<string.h>void input(char *p[],int n){int j;for(j=0;j<n;j++){//改为gets(p[j]);只能处理n-1个?因为有回车符被读取了 不过gets(可以处理进来空格…)gets(p[j]);}/for(j=0;j<n;j++){printf("%s",p[j]);}/}void sort(cha原创 2020-12-12 00:30:27 · 209 阅读 · 1 评论 -
高精度与二维数组
高精斐波那契数列本题一看数据范围就知道是高精,很多人看到高精就不会了,因为高精确很好理解却很难打代码,这很让人头疼,其实不难,我将讲一个比较易懂实用的方法,希望对大家有所帮助上思路思路和斐波那契一样,不过特判a[0][1]=0a[1[1]=1,a[2][1]=1,之后,a[i][j]=a[i-1][j]+a[i-2][j],这是主要公式,为什么开二维数组呢,因为用到高精,一直循环到n,这是斐波那契的主要思路,难点在于如何打高精,接下来我将讲如何打高精的代码刚才提到的二维数组的第二维是进位用的,满十进一,每原创 2020-12-11 23:55:50 · 286 阅读 · 0 评论 -
递归好题
看到大家的题解都写到了卡特兰数,但是没有细细的讲讲这跟本题有什么关系本题的描述十分简单。n个数依次进栈,可随机出栈。求有几种可能。dfs可以解,但是递推仿佛好像如同看上去貌似更简单一些。解释一下原理:建立数组f。f[i]表示i个数的全部可能性。f[0] = 1, f[1] = 1; //当然只有一个设 x 为当前出栈序列的最后一个,则x有n种取值由于x是最后一个出栈的,所以可以将已经出栈的数分成两部分比x小比x大比x小的数有x-1个,所以这些数的全部出栈可能为f[x-1]比x大的数有n原创 2020-12-11 23:53:12 · 86 阅读 · 0 评论 -
指针的熟悉
#include<stdio.h>void swap(int *a,int *b){int temp;temp=*a;*a=*b;*b=temp;}int main(){int a,b;scanf("%d %d",&a,&b);swap(&a,&b);printf("%d %d",a,b);return 0;}原创 2020-12-09 21:09:00 · 80 阅读 · 0 评论