算法汇总啊

一些常用算法汇总

  • 算法思想-----数据结构
  • 动态规划(DP)
    • 0.题目特点
    • 1.【重点】经典例题(简单一维dp)
      • 1.斐波那契数列
      • 2.矩形覆盖
      • 3.跳台阶
      • 4.变态跳台阶
    • 2.我的日常练习汇总(DP)
      • 1.蓝桥真题-----路径

算法思想-----数据结构

  • 数据结构的存储方式 : 顺序存储(数组) , 链式存储(链表)

      顺序存储(数组) : 在内存中的存储空间是连续的 , 所以可以通过索引来获取存储的元素
      链式存储(链表) : 不是连续存储的 , 可能是这一个那一个的 .
      				 通常是由 数据域和指针域组成-->也就是data和next指针 (next指针指向下一个节点的地址)
    
  • 数据结构底层逻辑

      所以啊 , 数据结构的那些东西(数组,链表,栈,队列,图,树,散列表等等)--->其实底层逻辑 都是数组或链表
    
  • 数组和链表优缺点

    数组--->可以随机访问(通过索引) , 但是 需要考虑存储容量的问题
    链表--->没有存储容量的问题 , 但是不能随机访问元素
    
  • 数据结构存在的意义

      数据结构存在的意义---->就是为了处理数据啊(增删改查)--->怎么增删改查呢?---->遍历+递归
      那为什么会有那么多种数据结构呢 ? ---->因为每种数据结构的应用场景不一样(灵活应用,优化代码嘛) 
    

动态规划(DP)

0.题目特点

  • 1.计数(问:how many ways。。。)
    • a.有多少种方式 走到右下角
    • b.有多少种方法 选出k个数使得和是sum
  • 2.求最大值、最小值(最大的一个解题类型)
    • a.从左上角走到右下角 路径的最大数字和
    • b.最长上升子序列的长度
  • 3.求存在性
    • a.取石子游戏,先手是否必胜
    • b.能不能选出k个数 使得和是sum

1.【重点】经典例题(简单一维dp)

1.斐波那契数列

1 1 2 3 5 8 …

这是最经典的递归问题,
但 如果用递归求解,会重复计算一些子问题。
那如何用 动态规划 求解呢。

题目描述:求斐波那契数列的第n项,n<39。
在这里插入图片描述

  • 递归法
    根据递推公式:f(n) = f(n-1)+f(n-2)
int fib(int n){
	if(n<2) return n;
	return fib(n-1)+fib(n-2);
}
  • dp
    • 1.状态 : 最后一步是求f[n]
    • 2.转移方程:f[n] = f[n-1]+f[n-2]
    • 3.初始化:f[1]=1 ;边界条件:n<=1
    • 4.计算顺序:1—>n
public int Fibonacci(int n){
	if(n <= 1) return n;	//边界条件
	int[] fib = new int[n+1];
	fib[1] = 1;		//初始化
	fib[2] = 1;
	for(int i=2;i<=n;i++){	//计算顺序
		 fib[i] = fib[i-1] + fib[n-2];	//状态方程
	return fib[n];
}

2.矩形覆盖

题目描述:我们可以用2*1的小矩形横着或竖着去覆盖更大的矩形。请问用n2*1的小矩形无重叠的覆盖一个2*n的大矩形,总共有多少种方法?

  • 分析:dp[1] = 1 ; dp[2] = 2

      要覆盖2*n的大矩形,
      可以先覆盖一个2*1的矩形,再覆盖2*(n-1)的矩形;
      也可以先覆盖两个个2*2的矩形,再覆盖2*(n-2)的矩形。
      而覆盖2*(n-1)和2*(n-2) 可以看做是子问题,传递下去
    

在这里插入图片描述

- 最后一步:求 dp[n]
- 初始化:dp[1] = 1 ; dp[2] = 2;  边界条件:n<=2
- 转移方程(递归表达式):dp[n] = dp[n-1] + dp[n-2]
- 计算顺序:1-->n
  • 递归法
public int rectCover(int n){
	if(n<=2) return n;
	return rectCover(n-1)+rectCover(n-2);
}
  • dp算法
public int rectCover(int n){
	if(n<=2) return n;
	int[] dp = new int[n+1];
	dp[1] = 1;
	dp[2] = 2;
	for(int i=3;i<=n;i++){
		dp[i] = dp[i-1]+dp[i-2];
	}
	return dp[n];
}

3.跳台阶

题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级台阶总共有多少种跳法。
在这里插入图片描述

  • 分析

      int[] dp = new int[n]; //dp[i]表示跳到第i级台阶有多少种跳法
      
      状态(最后一步):d[n]
      初始化:dp[1] = 1 ; dp[2] = 1 ;
      边界条件:n<=2;
      状态转移方程:dp[i] = dp[i-1]+dp[i-2]; 	//dp[i]的状态,要么从i-1的台阶跳1级到i	; 要么从i-2级台阶一次跳2级到i
      计算顺序:1-->n 	//计算 dp[i] 需要先计算 dp[i-1] 和 dp[i-2]
    
public int jumpFloor(int n){
	if(n<=2) return n;
	int[] dp = new int[n+1];
	dp[1] = 1;
	dp[2] = 1;
	for(int i=3;i<=n;i++{
		dp[i] = dp[i-1]+dp[i-2];
	}
	return dp[n];
}

4.变态跳台阶

题目描述:一只青蛙可以跳上1级台阶,也可以跳上2级…它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
在这里插入图片描述

  • 分析

      最后一步:求 dp[n] //跳上n级台阶的方案数
      初始化:dp[1] = 1,dp[2] = 1,...,dp[n] = 1
      状态转移方程:dp[i] = dp[i-1]+dp[i-2]+...+dp[1]	//从所有台阶上都可以调到i级台阶上去
      计算顺序:1-->n
    
  • 代码实现

public int jumpFloorII(int n){
	int[] dp = new int[n+1];
	Arrays.fill(dp,1);	//把dp数组中所有元素初始化为1
	//对于每一级台阶,方案数都是前面所有台阶的方案数的和
	for(int i=1;i<=n;i++){	
		for(int j=1;j<i;j++){
			dp[i] += dp[j];
		}
	}
	return dp[n];
}

2.我的日常练习汇总(DP)

1.蓝桥真题-----路径

蓝桥真题:路径
在这里插入图片描述

import java.util.Arrays;
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        //最短路径-->dp
        //最小公倍数 = 两数乘积/最大公约数
        System.out.println(check());
        scan.close();
    }

    public static int check(){
      int[] dp = new int[2021+1];
      //结束条件 
      //初始化
      Arrays.fill(dp,Integer.MAX_VALUE);
      dp[1] = 0;
      dp[2] = 2;
      
      for(int i=3;i<=2021;i++){
        for(int x=i-21;x<i;x++){
          if(x<=0) continue;
          dp[i] = Math.min((dp[x] + lcm(i,x,gcb(i,x))) , dp[i]);
        }
      }
      return dp[2021];
    }

    public static int gcb(int a,int b){
      if(b == 0) return a;
      return gcb(b,a%b);
    }
    public static int lcm(int a,int b,int gcb){
      return (a*b)/gcb;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/522661.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【一步一步学】新手如何学习RouterOS

最近有很多同学私下问&#xff1a;ROS太难学&#xff0c;很难入门。 我在这里统一回答大家这个问题&#xff0c;其实入门还是比较简单&#xff0c;今天我写一个大概的学习过程 &#xff0c;后续是需要你们自己针对性学习与深入研究。 1. 了解RouterOS基础 学习任何东西&#x…

K8S之Job和CronJob控制器

这里写目录标题 Job概念适用场景使用案例 CronJob概念适用场景使用案例 Job 概念 Job控制器用于管理Pod对象运行一次性任务&#xff0c;例如&#xff1a;对数据库备份&#xff0c;可以直接在k8s上启动一个mysqldump备份程序&#xff0c;也可以启动一个pod&#xff0c;这个pod…

PostgreSQL入门到实战-第二弹

PostgreSQL入门到实战 PostgreSQL安装之Windows官网地址PostgreSQL概述Windows上安装PostgreSQL更新计划 PostgreSQL安装之Windows 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://www.postgresql.org/PostgreSQL概…

【Attention(0)】卷首语,从“SEAttention注意力效果秒杀CBAM”聊到“Transformer”

Attention 注意力是一个非常有价值的机制&#xff0c;例如我们耳熟能详的 SE attention。我们常常看到这样的标题《YOLOv8&#xff0c;注意力&#xff0c; SEAttention注意力&#xff0c;效果秒杀CBAM》。 其实&#xff0c;CBAM 是一种“卷积神经网络注意力模块”(Convolution…

The Sandbox:在NFT Paris 2024引领数字文艺复兴

我们的欧洲、中东和非洲&#xff08;EMEA&#xff09;总部位于法国巴黎&#xff0c;我们的创始人也是土生土长的法国人&#xff0c;因此 The Sandbox 一直与 "光之城 "有着紧密的联系。近年来&#xff0c;巴黎日益成为 Web3 创新的中心&#xff0c;NFT 艺术氛围日益浓…

动态规划刷题(算法竞赛、蓝桥杯)--线段(线性DP)

1、题目链接&#xff1a;P3842 [TJOI2007] 线段 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include <bits/stdc.h> using namespace std; const int N20010; int a[N][2],f[N][2]; //a[i][0]表示l[i],a[i][1]表示r[i] int dis(int a,int b){return abs(a-b); } int…

企业级开源路由系统VyOS-构建和使用

介绍 VyOS是一个基于Linux的企业级路由器操作系统&#xff0c;被许多公司和个人用来驱动物理网络设备&#xff0c;如路由器和防火墙。它有一个统一的命令行界面来管理其所有的网络相关功能&#xff08;和Juniper Junos操作很像&#xff09;。VyOS使用Debian GNU/Linux作为其基…

【JAVASE】带你了解instanceof和equals的魅力

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G-CSDN博客 1.instanceof instanceof 是 Java 的保留关键字。它的作用是测试…

自动化高并发批量抓取京东平台商品数据(内附接入key密钥API响应示例)

通过API接口&#xff08;接入key&#xff0c;密钥&#xff09;&#xff0c;可以获取商品的标题、价格、图片、描述等详细信息。 参数说明 通用参数说明 version:API版本key:调用key,测试key:test_api_keysecret:调用secret,测试secret:(不用填写)cache:[yes,no]默认yes&#x…

Java Netty个人对个人私聊demo

一、demo要求 1&#xff09;编写一个Netty个人对个人聊天系统&#xff0c;实现服务器端和客户端之间的数据简单通讯&#xff08;非阻塞&#xff09; 2&#xff09;实现单人对单人聊 3&#xff09;服务器端&#xff1a;可以监测用户上线&#xff0c;离线&#xff0c;并实现消…

【游戏逆向】游戏全屏捡物的实现

0x0前言&#xff1a; 在角色对战类中&#xff0c;拾取怪物掉落的装备是一项必备的工作&#xff0c;由于装备位置掉落的不确定性&#xff0c;玩家想要拾取离角色距离较远的装备需要一定的时间&#xff0c;这一段时间往往会影响游戏的评分或是玩家的心态&#xff0c;基于此&…

【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)

#算法 目录 题目描述思路及实现方式一&#xff1a;递归思路代码实现Java 版本C 语言版本Python3 版本 复杂度分析 方式二&#xff1a;迭代和原地反转思路代码实现Java 版本C 语言版本Python3 版本 复杂度分析 总结相似题目 标签&#xff1a;链表、递归 题目描述 给你链表的头…

接口日志配置表

表&#xff1a;ZTALL_LOGCFG ZE_ENABLED XFIELD ZE_LOGGING XFIELD ZE_NOTRANS XFIELD ZE_IFURL TEXT255 MANDT MANDT CLNT 3 0 0 客户端 SYSID SYST_SYSID CHAR 8 0 0 ABAP 系统字段&#xff1a;SAP 系统的名称 IFSNR ZE_IFSNR CHAR 30 0 0 接口编号(系统ID流水号…

线程安全--深入探究线程等待机制和死锁问题

꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转…

9亿用户、估值300亿美元,「暗黑版微信」决定上市

自 2017 年以来&#xff0c;Telegram 的创始人帕维尔•杜罗夫&#xff08;Pavel Durov&#xff09;就从没有接受过任何公共采访。直到不久前&#xff0c;这位神秘的亿万富翁接受了英国《金融时报》的采访&#xff0c;他向外界释放出了一个信号——Telegram 正在谋求 IPO。 根据…

Springboot相关知识-图片描述(学习笔记)

学习java过程中的一些笔记&#xff0c;觉得比较重要就顺手记录下来了~ 目录 一、前后端请求1.前后端交互2.简单传参3.数组集合传参4.日期参数5.Json参数6.路径参数7.响应数据8.解析xml文件9.统一返回类10.三层架构11.分层解耦12.Bean的声明13.组件扫描14.自动注入 一、前后端请…

《Java面试自救指南》(专题三)数据库

文章目录 一条sql语句的查询流程有哪些数据库存储引擎&#xff0c;各自的区别数据库的三大范式事务的四大特性&#xff08;含隔离级别&#xff09;MySQL四种隔离机制的底层实现&#xff08;如何解决幻读 &#xff09;MySQL有哪几种锁&#xff0c;分别怎么实现数据库中有哪些索引…

Leetcode-Hot 100题目分类

哈希 &#xff08;以空间换时间&#xff09; 1 两数之和 原始的暴力破解的方法&#xff1a; class Solution {public int[] twoSum(int[] nums, int target) {/** 暴力破解的方法 */int[] result new int[2];int length nums.length;for(int i 0;i<length;i){for(int j…

企业计算机服务器中了locked勒索病毒怎么办,locked勒索病毒解密流程步骤

网络技术的不断发展为企业的生产运营提供了极大便利&#xff0c;也让企业的生产效率大大提高&#xff0c;但网络是一把双刃剑&#xff0c;给给企业的数据安全问题带来严重威胁。近期&#xff0c;云天数据恢复中心接到浙江某商贸公司的求助&#xff0c;企业计算机服务器遭到了lo…

使用 Azure OpenAI、知识图 FalkorDB 和 LlamaIndex 构建医疗保健聊天机器人

原文地址&#xff1a;building-a-mental-health-qa-chatbot-using-falkordb-knowledge-graph-and-llamaindex 介绍 知识图谱是一种将数据转换为机器可以理解的知识的模型&#xff0c;它比传统数据管理系统更能够捕获数据的语义性质和含义。知识图谱通过结构化地表示实体、属性…