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

相关文章

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主从复制实

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

Spring中Bean有关NullPointerException异常的原因分析

《Spring中Bean有关NullPointerException异常的原因分析》在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerE... 目录Spring中Bean有关NullPointerException异常的原因问题描述解决方案总结

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

python-nmap实现python利用nmap进行扫描分析

《python-nmap实现python利用nmap进行扫描分析》Nmap是一个非常用的网络/端口扫描工具,如果想将nmap集成进你的工具里,可以使用python-nmap这个python库,它提供了... 目录前言python-nmap的基本使用PortScanner扫描PortScannerAsync异

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S