money-oriented programming

server/2025/1/1 2:23:05/

preface:休假一周去了苏州散心,发现苏州人真的很重视英语,看了不少于前0个家庭都在教孩子英语了。深感内地教育落后于他们,如果再不学习,会落后的更厉害,加上现在国际国内形势如此严峻,所谓的铁饭碗将来可能将不复存在,所以学好一门技能还是非常有必要的,所以我决心把leetcode继续刷起来。这篇笔记只会记录本人刷题的一些心得体会或者有用的八股。fighting!!!

1、时间复杂度和空间复杂度

普通的时间复杂度和空间复杂度没什么好讲的,算就行了。重要的是递归的空间复杂度和时间的复杂度。

1.1递归程序的时间复杂度

递归算法的时间复杂度本质上要看:递归的次数 × \times × 每次递归的时间负责度

a、拿斐波那契数列求和的程序来看:

int fibonacci(int i){if(i < 0) return 0;else if(i == 1) return 1;else return fibonacci(i - 1) + fibonacci(i - 2);
}

对于这个递归算法,每次递归的过程都是 O ( 1 ) O(1) O(1)的操作,而对于这份递归算法如果画出他的递归图,就是一颗二叉树,二叉树的每个节点都是一次递归,根据一颗深度为k的二叉树最多可以有 2 k − 1 2^k - 1 2k1个节点可知,该递归算法的时间复杂度为 O ( 2 n ) O(2^n) O(2n)

b、拿递归二分查找来看

int binary_search( int arr[], int l, int r, int x) {if (r >= l) {int mid = l + (r - l) / 2;if (arr[mid] == x)return mid;if (arr[mid] > x)return binary_search(arr, l, mid - 1, x);return binary_search(arr, mid + 1, r, x);}return -1;

根据二分查找的思路(将排序的数组不停的折,最终折到要找的数,假设要折n次,则有 2 n = t a r g e t 2^n = target 2n=target)可以知道二分查找的时间复杂度是 O ( l o g n ) O(log n) O(logn)

1.2递归程序的空间复杂度

递归算法的空间复杂度本质上要看:递归深度(即递归多少次) × \times × 每次递归的空间复杂度
递归在操作系统层面就是不停的入栈出栈的过程,每次递归就是将所需的空间压到栈中,递归结束后再把递归的数据弹出去。所以这个栈的深度就是递归的深度
对于斐波那契数列,递归调用的深度就是 n, 每次递归调用的空间复杂度为 O ( 1 ) O(1) O(1)(因为无需开辟新空间)。

对于递归的二分查找算法,递归调用的深度就是要折的次数,即 l o g n log n logn,如果二分查找传参的时候传的是数组的首地址,则每次递归的空间复杂度为 O ( 1 ) O(1) O(1),此时二分查找的空间复杂度为 O ( l o g n ) O(log n) O(logn);如果传的是整个数组,则每次递归的空间复杂度为 O ( n ) O(n) O(n),此时二分查找的空间复杂度为 O ( n l o g n ) O(nlog n) O(nlogn)

2、数组

i will fill it soon…

3、排序

i will fill it soon…

4、字符串

i will fill it soon…


http://www.ppmy.cn/server/154289.html

相关文章

Wend看源码-Java-Map学习

摘要 在当今的编程世界中&#xff0c;深入了解各类数据类型对于开发者而言至关重要。本篇聚焦于 JDK 21 版本下&#xff0c;Java.util 包所提供的 Map 类型。Map 作为一种关键的数据结构&#xff0c;能够以键值对的形式高效存储和检索数据&#xff0c;广泛应用于众多领域。 本文…

keepass实现google自输入_SSH_TELNET_RDP联动

涉及到的是使用开源密码管理工具KeePass结合特定插件实现自动化密码填充的功能&#xff0c;特别是在谷歌浏览器中的应用。KeePass是一款强大的密码管理软件&#xff0c;它允许用户安全地存储各种账号的用户名和密码&#xff0c;并通过加密保护这些敏感信息。 1. keepass安装及配…

SVN和Git

SVN&#xff08;Subversion&#xff09;和 Git 都是流行的版本控制系统&#xff08;VCS&#xff09;&#xff0c;但它们在架构、使用场景、功能等方面有所不同。以下是它们的主要区别、各自的好处以及如何使用它们的详细说明。 一、SVN 和 Git 的区别 1. 版本控制模型 SVN&…

spring-面试整理

简述 spring中如何基于注解添加bean 和装配bean 1、首先要在Spring中配置开启注解扫描 2、在具体的类上增加具体的注解 3、spring中通常使用autowired 或者是Resource等注解进行bean的装配 总结&#xff1a; 装配流程&#xff1a; 1、实例化&#xff1a;spring容器根据配置或者…

前端经典面试合集(二)——Vue/React/Node/工程化工具/计算机网络

1. 说说 Vue 中的 Diff 算法 Vue 的 Diff 算法 主要用于优化虚拟 DOM 和实际 DOM 之间的比较过程。它通过以下几种策略来提高性能&#xff1a; 最小化对 DOM 的操作&#xff1a;Vue 通过在内存中构建一个虚拟 DOM 树&#xff0c;在虚拟 DOM 树与真实 DOM 树之间进行比较和更新…

JVMTI 笔记

JVMTI(JVM tool interface)是一套c/c开发接口&#xff0c;用于对JVM进行性能分析、debug、内存管理、线程分析等各种黑科技操作 JVMTI开发1个CPU Profiler&#xff1a; agent.c JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved) {jvmtiEnv *…

探索 .idea 文件夹:Java Maven 工程的隐形守护者

一、.idea文件夹深度解析&#xff1a;IntelliJ IDEA项目配置的核心 在Java Maven工程的开发环境中&#xff0c;.idea文件夹扮演着举足轻重的角色。这是IntelliJ IDEA项目特有的一个配置文件夹&#xff0c;它包含了项目所需的各种配置信息&#xff0c;以确保项目能够在不同的开…

【JavaEE进阶】Spring传递请求参数

目录 &#x1f38d;序言 &#x1f334;传递单个参数 &#x1f340;传递多个参数 &#x1f384;传递对象 &#x1f333;后端参数重命名&#xff08;后端参数映射&#xff09; &#x1f6a9;ReuqestParam注解 &#x1f38d;序言 访问不同的路径,就是发送不同的请求.在发送…