leetcode解题思路分析(一百五十二)1320 - 1326 题

2023-11-09 03:15

本文主要是介绍leetcode解题思路分析(一百五十二)1320 - 1326 题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. 二指输入的的最小距离
    二指输入法定制键盘在 X-Y 平面上的布局如上图所示,其中每个大写英文字母都位于某个坐标处。
    例如字母 A 位于坐标 (0,0),字母 B 位于坐标 (0,1),字母 P 位于坐标 (2,3) 且字母 Z 位于坐标 (4,1)。
    给你一个待输入字符串 word,请你计算并返回在仅使用两根手指的情况下,键入该字符串需要的最小移动总距离。

动态规划解题:word第i位和i-1位的dp关系,取决于i-1时左右手位置及距离word[i]的距离。由此可以列出递推公式。

class Solution {
public:int getDistance(int p, int q) {int x1 = p / 6, y1 = p % 6;int x2 = q / 6, y2 = q % 6;return abs(x1 - x2) + abs(y1 - y2);}int minimumDistance(string word) {int n = word.size();vector<vector<int>> dp(n, vector<int>(26, INT_MAX >> 1));fill(dp[0].begin(), dp[0].end(), 0);for (int i = 1; i < n; ++i) {int cur = word[i] - 'A';int prev = word[i - 1] - 'A';int d = getDistance(prev, cur);for (int j = 0; j < 26; ++j) {dp[i][j] = min(dp[i][j], dp[i - 1][j] + d);if (prev == j) {for (int k = 0; k < 26; ++k) {int d0 = getDistance(k, cur);dp[i][j] = min(dp[i][j], dp[i - 1][k] + d0);}}}}int ans = *min_element(dp[n - 1].begin(), dp[n - 1].end());return ans;}
};
  1. 餐馆营业额变化增长
    你是餐馆的老板,现在你想分析一下可能的营业额变化增长(每天至少有一位顾客)。计算以 7 天(某日期 + 该日期前的 6 天)为一个时间段的顾客消费平均值。average_amount 要 保留两位小数。结果按 visited_on 升序排序。返回结果格式的例子如下。
# Write your MySQL query statement below
SELECTvisited_on,sum_amount amount,ROUND( sum_amount / 7, 2 ) average_amount
FROM (SELECTvisited_on,SUM( sum_amount ) OVER ( ORDER BY to_days(visited_on) RANGE BETWEEN 6 PRECEDING AND current ROW ) sum_amountFROM (SELECTvisited_on,SUM( amount ) sum_amountFROM CustomerGROUP BY visited_on) tmp1
) tmp2
WHERE DATEDIFF(visited_on, ( SELECT MIN( visited_on ) FROM Customer )) >= 6;
  1. 6 和 9 组成的最大数字
    给你一个仅由数字 6 和 9 组成的正整数 num。你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。请返回你可以得到的最大数字。

转字符串,处理最高位,完事。

class Solution {
public:int maximum69Number(int num) {string s = to_string(num);for (char& ch: s) {if (ch == '6') {ch = '9';break;}}return stoi(s);}
};
  1. 竖直打印单词
    给你一个字符串 s。请你按照单词在 s 中的出现顺序将它们全部竖直返回。
    单词应该以字符串列表的形式返回,必要时用空格补位,但输出尾部的空格需要删除(不允许尾随空格)。
    每个单词只能放在一列上,每一列中也只能有一个单词。

很无聊的一道题,模拟过程即可,坑在于单词尾部空格要删除。这里有个点:auto循环其实是一个原值的拷贝构造,并不会修改原值。

class Solution {
public:vector<string> printVertically(string s) {int nIndex = 0, nSize = 0, tmpSize = 0;vector<string> ret;for (int i = 0; i < s.size(); ++i){while (s[i] != ' ' && i < s.size()){tmpSize++;i++;}nSize = max(nSize, tmpSize);tmpSize = 0;}ret.resize(nSize, "");for (int i = 0; i < s.size(); ++i){if (s[i] == ' ' && nIndex < nSize){if (nIndex == 0) continue;for (int j = nIndex; j < nSize; ++j)ret[j] += ' ';nIndex = nSize;}else{ret[nIndex] += s[i];nIndex++;}if (nIndex == nSize)nIndex = 0;}for (int j = 0; j < ret.size(); j++ ){int i = ret[j].size() - 1;while (i && ret[j][i] == ' '){i--;}if (i != ret[j].size() - 1)ret[j][i + 1] = '\0';}return ret;}
};
  1. 删除给定值的叶子节点
    给你一棵以 root 为根的二叉树和一个整数 target ,请你删除所有值为 target 的 叶子节点 。
    注意,一旦删除值为 target 的叶子节点,它的父节点就可能变成叶子节点;如果新叶子节点的值恰好也是 target ,那么这个节点也应该被删除。
    也就是说,你需要重复此过程直到不能继续删除。
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* removeLeafNodes(TreeNode* root, int target) {if (!root) return NULL;root->left = removeLeafNodes(root->left, target);root->right = removeLeafNodes(root->right, target);if (root->left == NULL && root->right == NULL && root->val == target)return NULL;return root;}
};
  1. 灌溉花园的最少水龙头数目
    在 x 轴上有一个一维的花园。花园长度为 n,从点 0 开始,到点 n 结束。花园里总共有 n + 1 个水龙头,分别位于 [0, 1, …, n] 。
    给你一个整数 n 和一个长度为 n + 1 的整数数组 ranges ,其中 ranges[i] (下标从 0 开始)表示:如果打开点 i 处的水龙头,可以灌溉的区域为 [i - ranges[i], i + ranges[i]] 。请你返回可以灌溉整个花园的 最少水龙头数目 。如果花园始终存在无法灌溉到的地方,请你返回 -1 。
class Solution {
public:int minTaps(int n, vector<int>& ranges) {vector<int> rightMost(n + 1);iota(rightMost.begin(), rightMost.end(), 0);for (int i = 0; i <= n; i++) {int start = max(0, i - ranges[i]);int end = min(n, i + ranges[i]);rightMost[start] = max(rightMost[start], end);}int last = 0, ret = 0, pre = 0;for (int i = 0; i < n; i++) {last = max(last, rightMost[i]);if (i == last) {return -1;}if (i == pre) {ret++;pre = last;}}return ret;}
};

这篇关于leetcode解题思路分析(一百五十二)1320 - 1326 题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/373766

相关文章

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实