LeetCode 801. 使序列递增的最小交换次数(动态规划)

1. 题目

我们有两个长度相等不为空的整型数组 A 和 B 。

我们可以交换 A[i] 和 B[i] 的元素。注意这两个元素在各自的序列中应该处于相同的位置。

在交换过一些元素之后,数组 A 和 B 都应该是严格递增的(数组严格递增的条件仅为A[0] < A[1] < A[2] < … < A[A.length - 1])。

给定数组 A 和 B ,请返回使得两个数组均保持严格递增状态的最小交换次数。假设给定的输入总是有效的。

示例:
输入: A = [1,3,5,4], B = [1,2,3,7]
输出: 1
解释: 
交换 A[3] 和 B[3] 后,两个数组如下:
A = [1, 3, 5, 7] , B = [1, 2, 3, 4]
两个数组均为严格递增的。注意:
A, B 两个数组的长度总是相等的,且长度的范围为 [1, 1000]。
A[i], B[i] 均为 [0, 2000]区间内的整数。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-swaps-to-make-sequences-increasing
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 每一个位置有两种状态,换 or 不换(dp[i][0]表示不换,dp[i][1]表示换,数值存储最少次数)
  • 初始化,dp[0][0] = 0;dp[0][1] = 1;
  • A[i]>A[i-1] && B[i]>B[i-1]
    都是升序的,不换,dp[i][0] = dp[i-1][0],换,dp[i][1] = dp[i-1][1]+1(前面i-1,换过位置,那我也要跟着过去+1)
  • A[i]>B[i-1] && B[i]>A[i-1]
    跟对方前一个组成升序,我不换,那要取前面换的状态dp[i][0] = dp[i-1][1],我换一下,前面取不换的状态dp[i][1] = dp[i-1][0]+1
  • 上面重叠的状态都取最小值min,返回min(dp[n-1][0], dp[n-1][1])
class Solution {
public:int minSwap(vector<int>& A, vector<int>& B) {int i, n = A.size();vector<vector<int>> dp(n,vector<int>(2,INT_MAX));dp[0][0] = 0;dp[0][1] = 1;for(i = 1; i < n; ++i){if(A[i]>A[i-1] && B[i]>B[i-1]){dp[i][0] = min(dp[i][0], dp[i-1][0]);dp[i][1] = min(dp[i][1], dp[i-1][1]+1);}if(A[i]>B[i-1] && B[i]>A[i-1]){dp[i][0] = min(dp[i][0], dp[i-1][1]);dp[i][1] = min(dp[i][1], dp[i-1][0]+1);}}return min(dp[n-1][0], dp[n-1][1]);}
};

36 ms 15.7 MB

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

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

相关文章

mock模拟接口测试 vue_vue+mock.js实现前后端分离

之前都是介绍在普通项目中使用mock.js&#xff0c;那么本次就来介绍一下在vue中使用mock.js实现前后端分离。安装&#xff1a;npm install mockjs这里先写个小案例介绍一下具体使用&#xff0c;写法不规范&#xff0c;仅供参考。然后案例讲完后我们讲具体的规范使用那么一起来看…

进一步的去了解正则[一]

1 正则是什么. 请先看 http://www.phpchina.com/html/11/n-34811.html 几k 的解释后. 原地址已被更改&#xff0c;重新找了一个教程&#xff0c;请点击。 http://deerchao.net/tutorials/regex/regex.htm2 实例剖析.1. $str <FORM NAME"ADFA" ACTION"AS…

LeetCode 123. 买卖股票的最佳时机 III(动态规划)

1. 题目 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意: 你不能同时参与多笔交易&#xff08;你必须在再次购买前出售掉之前的股票&#xff09;。 示例 1: 输入: […

mysql异步复制参数_MySQL Replication(异步复制)基本原理

1、复制进程Mysql的复制(replication)是一个异步的复制&#xff0c;从一个Mysqlinstace(称之为Master)复制到另一个Mysqlinstance(称之Slave)。实现整个复制操作主要由三个进程完成的&#xff0c;其中两个进程在Slave(Sql进程和IO进程)&#xff0c;另外一个进程在Master(IO进程…

SQL Server 2005之PIVOT/UNPIVOT行列转换(转)

SQL Server2005引入了很多迎合开发者口味的新特性&#xff0c;虽然改动不大&#xff0c;却大大了减少了开发者的工作量&#xff0c;这种替用户考虑的开发思路&#xff0c;值得称赞。 在SQL Server2000中&#xff0c;要实现行列转换&#xff0c;需要综合利用聚合函数和动态SQL&a…

LeetCode 188. 买卖股票的最佳时机 IV(动态规划)

1. 题目 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。 注意: 你不能同时参与多笔交易&#xff08;你必须在再次购买前出售掉之前的股票&#xff09;。 示例 1: 输入: [2…

mysql slow log 分析工具_mysql slow log分析工具的比较

mysql 中的 slow log 是用来记录执行时间较长(超过 long_query_time 秒)的 sql 的一种日志工具。启用 slow log在 my.cnf 中设置[mysqld]slow_query_logonslow_query_log_filemysql-slow重启 MySQL 服务。五款常用工具mysqldumpslowmysqlslamyprofimysql-explain-slow-logmysql…

利用寄存器进入栈值交换

代码 varA, B: Word;beginA :1; B :2; asmmov ax, a //赋值 mov bx, b push ax //进栈 push bx pop ax //退栈 pop bx mov a, ax //利用栈先进后出, ax已退栈, 寄存器里的值为原bx 的值 mov b, bx //利用栈先进后出, bx已退栈, 寄存…

LeetCode 309. 最佳买卖股票时机含冷冻期(动态规划)

1. 题目 给定一个整数数组&#xff0c;其中第 i 个元素代表了第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;: 你不能同时参与多笔交易&#xff08;你必须在再…

mysql new map_使用构造器模式动态构建Map作为mybatis的查询条件

Map filter mapper.convertValue(this,Map.class);System.out.printf("查询条件:%s\n", JSON.toJSONString(filter));returnfilter;}//https://stackoverflow.com/questions/6796187/java-introspection-object-to-map/57057596#57057596public MaptoFilter2(){Map …

处理Excel,填充空白区域

在企业应用开发中经常是业务人员提供Excel的数据源&#xff0c;而开发人员将Excel数据导入到数据库中&#xff0c;然后在数据库中进行处理。在Excel中为了表示一种层次和所属关系&#xff0c;很多时候会产生很多空白的单元格。比如一个CRM数据&#xff0c;里面有销售团队、销售…

LeetCode 901. 股票价格跨度(单调栈)

1. 题目 编写一个 StockSpanner 类&#xff0c;它收集某些股票的每日报价&#xff0c;并返回该股票当日价格的跨度。 今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数&#xff08;从今天开始往回数&#xff0c;包括今天&#xff09;。 例如&#xff0c…

今天动手熟悉了一下css和php

手又痒了&#xff0c;动了动css和php&#xff0c;复习了已经忘了很久的csshttp://www.the520.cn/files/cssstudy/转载于:https://www.cnblogs.com/x2048/articles/1793996.html

Python核心教程(第二版)读书笔记(三)

第三章Python基础 2010-04-09 换行 一行过长的语句可以使用反斜杠‘\’分解成几行。有两种例外情况一个语句不使用反斜线也可以跨行。 1、在使用闭合操作符时&#xff0c;单一语句可以跨多行。例如&#xff1a;在含有小括号、中括号、花括号时可以多行书写。 2、三引号包括下的…

mysql没有写入权限_MySQL的权限系统

一、MySQL权限系统一)MySQL权限系统介绍权限系统的作用&#xff1a;授予来自某个主机的某个用户可以查询、插入、修改、删除等数据库操作的权限不能明确指定拒绝某个用户的连接权限控制(授权与回收)的执行语句包括create user&#xff0c;grant&#xff0c;revoke授权后的权限都…

LeetCode 1300. 转变数组后最接近目标值的数组和(二分查找)

1. 题目 给你一个整数数组 arr 和一个目标值 target &#xff0c;请你返回一个整数 value &#xff0c; 使得将数组中所有大于 value 的值变成 value 后&#xff0c;数组的和 最接近 target &#xff08;最接近表示两者之差的绝对值最小&#xff09;。 如果有多种使得和最接近…

AJAX 弹出窗消息类

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.IO;using System.Text;using System.Web.UI;namespace WebApplication{ /// <summary> /// 消息类 /// /// /// </summary> public class Me…

mysql 创建初始化帐号_MySQL创建SCOTT用户及初始化数据

表结构create table dept(-- 部门编号deptno int unsigned auto_increment primary key,-- 部门名称dname varchar(15) ,-- 部门所在位置loc varchar(50))engine InnoDB;create table emp(-- 雇员编号empno int unsigned auto_increment primary key,-- 雇员姓名ename varchar…

潜在语义分析(Latent Semantic Analysis,LSA)

文章目录1. 单词向量空间、话题向量空间1.1 单词向量空间1.2 话题向量空间2. 潜在语义分析算法2.1 例子3. 非负矩阵分解算法4. TruncatedSVD 潜在语义分析实践一种无监督学习方法&#xff0c;主要用于文本的话题分析其特点是通过矩阵分解发现文本与单词之间的基于话题的语义关系…

python分割提取字符串_Python 字符串操作(截取/替换/查找/分割)

python字符串连接先介绍下效率比较低的&#xff0c;有些新手朋友就会犯这个错误&#xff1a;a [a,b,c,d]content for i in a:content content iprint content说下为什么效率会低呢&#xff1f;原因&#xff1a;在循环连接字符串的时候&#xff0c;他每次连接一次&#xff0…