【无标题】

这篇博客详细记录了算法中的内存计算方法、代码运行时间优化以及Java读写加速。深入探讨了数学在算法中的应用,包括整数划分、组合数、快速幂等,并提供了递归、动态规划和母函数的解题思路。此外,还介绍了二分查找、前缀和、区间合并、ST表等常见数据结构和算法,以及字符串处理、滑动窗口和双指针技巧。最后,涵盖了DP、图论和一些模板题的解题策略。
摘要由CSDN通过智能技术生成

算法笔记

内存计算方法 -

1 M = 1024 * 1024 个B
一个int是4个B
内存 = (int个数*4)/(1024*1024);

其余的以此类推

代码运行时间


#include <time.h>

int main()
{
    clock_t start, finish;
    //clock_t为CPU时钟计时单元数
    start = clock();
    //clock()函数返回此时CPU时钟计时单元数
    /*
	 你的代码
	
	*/
    finish = clock();
    //clock()函数返回此时CPU时钟计时单元数
    cout <<endl<<"the time cost is:" << double(finish - start) / CLOCKS_PER_SEC<<endl;
    //finish与start的差值即为程序运行花费的CPU时钟单元数量,再除每秒CPU有多少个时钟单元,即为程序耗时
    return 0;
}

Java 加快读写的方法

import java.io.*;
public class Main{
   
	static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer st = new StreamTokenizer(bf);
    static PrintWriter pw = new PrintWriter(System.out);
	public static void main(String[] args) throws IOException {
   
		pw.println("fs");
		double[] b = new double[10];
		for(int i = 0 ; i< 4 ; i ++) {
   
			b[i] = I();
		}
		for(int i = 0 ; i < 4 ; i ++) {
   
			pw.println(b[i]);
		}
		pw.flush();  // 这个不能掉
	}
	static double I() throws IOException{
   
		st.nextToken();
		return st.nval;
	}
}

数学

整数划分的方法(dp,递归,母函数)

给定一个整数n , 拆分的数字可以重复,其中数字不可大于m ,问有多少总拆分方法

分析问题

1, 如果 n 或者 m 当中有一者等于1的话,那它只有一种拆分方法,全部为1

2,如果n 小于 m ,但是m肯定是不能大于n的,所以 dp[n][m] = dp[n][n]

3 , 如果n 等于 m 例如 n = 4, m = 4 则 4 = 4 算一种拆分方法 ,所以接下来就是对 n 进行 m-1 的拆分 ,因为 m = 4 的时候已经算进去了 dp[n][m] = dp[n][m-1] + 1 这个1 就是上面的 4 = 4的一种方法

4,当n 大于m 接下来有两种选择进行拆分

(1)划分中有一个数为m,那么从n中减去m 即n-m 继续对n-m进行拆分 dp[n-m][m]

(2)划分中全部的数都小于m,即每个数都不大于m-1,继续拆分dp[n][m-1]

总结可得

d p [ n ] [ m ] = { 1 n ∣ ∣ m = = 1 d p [ n ] [ n ] n < m d p [ n ] [ m − 1 ] + 1 n = = m d p [ n − m ] [ m ] + d p [ n ] [ m − 1 ] n > m

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值