算法汇总啊

一些常用算法汇总

  • 算法思想-----数据结构
  • 动态规划(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;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+MYSQL+Vue的学生读书笔记系统

学生读书笔记共享平台设计 目录 1、前言介绍 2、主要技术 3、数据库设计 4、部分截图 5、源码获取 1、前言介绍 本论文主要论述了如何使用JAVA语言开发一个读书笔记共享平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff…

无人机控制框架的设计

无人机控制框架的设计主要包括以下几个模块&#xff1a;传感器模块、控制模块、通信模块和执行器模块。 传感器模块&#xff1a;负责获取无人机当前的状态信息&#xff0c;包括位置、姿态、速度等。常用的传感器包括GPS、陀螺仪、加速度计、气压计等。 控制模块&#xff1a;根…

基于Spring Boot+Vue的在线拍卖系统

随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单管理、…

windows7安装高版本Node

项目需要安装高版本得node&#xff0c;windows7最高支持到v13&#xff0c;需要手动下载zip安装包进行解压&#xff0c;配置环境变量&#xff0c;添加路径到path&#xff0c;如果安装了nvm需要卸载&#xff0c;否则配置得高版本node可能不生效&#xff0c;成功后如下&#xff1a…

2.k8s架构

目录 k8s集群架构 控制平面 kube-apiserver kube-scheduler etcd kube-controller-manager node 组件 kubelet kube-proxy 容器运行时&#xff08;Container Runtime&#xff09; cloud-controller-manager 相关概念 k8s集群架构 一个Kubernetes集群至少包含一个控制…

【操作系统】CentOS7入门级安装

下载镜像 CentOS镜像下载Download (centos.org) 我们选择第一个 X86_64 CentOS Mirrors List 版本描述X86_X64带64位的32位扩展版(一般安装这个)ARM64 (aarch64)嵌入式。适用于微端(树莓派、机械臂、机械中控)IBM Power (ppc64le)专用于IBM POWER服务器 选择一个合适的链接 …

论文| Convolutional Neural Network-based Place Recognition - 2014

2014-Convolutional Neural Network-based Place Recognition

docker 搭建多个Linux系统环境 安装多个不同语言的项目

docker 搭建多个Linux系统环境 安装多个不同语言的项目 宝塔dockers可视化界面 https://blog.51cto.com/u_16213709/9473968

01.MySQL基础知识回顾

MySQL基础知识回顾 1.为什么要使用数据库 问题 如果把数据存储到内存中&#xff0c;那么重启后就消失了&#xff0c;我们希望一个数据被保存后永久存在于一个地方&#xff0c;也就是需要把数据持久化 什么是持久化 把数据保存到可掉电式存储设备中以供之后使用。大多数情况…

spring eureka 服务实例实现快速下线快速感知快速刷新配置解析

背景 默认的Spring Eureka服务器&#xff0c;服务提供者和服务调用者配置不够灵敏&#xff0c;总是服务提供者在停掉很久之后&#xff0c;服务调用者很长时间并没有感知到变化。或者是服务已经注册上去了&#xff0c;但是服务调用方很长时间还是调用不到&#xff0c;发现不了这…

计算机毕业设计java 基于Android的拼图游戏app

当今社会&#xff0c;随着电子信息技术的发展&#xff0c;电子游戏也成为人们日常生活的一部分。这种娱乐方式结合了日新月异的技术&#xff0c;在游戏软件中结合了多种复杂技术。拼图游戏流行在各种电子产品上&#xff0c;从计算机&#xff0c;掌上游戏机到如今的手机&#xf…

IntellIJ Idea 如何完美导入 Eclipse 项目

文章目录 前言背景一、导入文件1.1 选择从已有文件导入1.2 选择文件目录1.3 导入项目选择 eclipse1.4 选择jdk1.5 导入完成 二、配置依赖2.1 File - ProjectStructure2.2 添加 xml 文件2.3 配置tomcat 总结 前言 请各大网友尊重本人原创知识分享&#xff0c;谨记本人博客&…