一、观光景点组合得分问题
问题描述
小R正在研究一组观光景点,每个景点都有一个评分,保存在数组 values 中,其中 values[i] 表示第 i 个观光景点的评分。同时,景点之间的距离由它们的下标差 j - i 表示。
一对景点 (i < j) 的观光组合得分为 values[i] + values[j] + i - j,也就是两者评分之和减去它们之间的距离。
小R想知道,在哪种情况下能够获得观光景点组合的最高得分。
测试样例
样例1:
输入:
values = [8, 3, 5, 5, 6]
输出:11
样例2:
输入:
values = [10, 4, 8, 7]
输出:16
样例3:
输入:
values = [1, 2, 3, 4, 5]
输出:8
解题思路:
定义一个初始组合,从第二个元素开始遍历
计算当前j的values[j] - j
更新最大组合得分
更新max_i_plus_values
具体代码:
输出结果:
二、最少前缀操作问题
问题描述
小U和小R有两个字符串,分别是SS和TT,现在小U需要通过对SS进行若干次操作,使其变成TT的一个前缀。操作可以是修改SS的某一个字符,或者删除SS末尾的字符。现在你需要帮助小U计算出,最少需要多少次操作才能让SS变成TT的前缀。
测试样例
样例1:
输入:
S = "aba", T = "abb"
输出:1
样例2:
输入:
S = "abcd", T = "efg"
输出:4
样例3:
输入:
S = "xyz", T = "xy"
输出:1
样例4:
输入:
S = "hello", T = "helloworld"
输出:0
样例5:
输入:
S = "same", T = "same"
输出:0
解题思路:
计算需要删除的字符量
截断S,使长度不超过T
计算需要修改的字符数量
总操作次数
具体代码:
运行结果:
三、小C的好数
问题描述
小C对“好数”非常感兴趣,她定义一个不含前导零的正整数为“好数”,如果它的所有数位最多包含两种不同的数字。例如,数字 23,2323,9,111,和 101 都是好数。现在小C想知道,从1到nn之间有多少个好数。
例如:当n=110n=110时,所有的1位数、2位数,以及一些3位数(如 100, 101)都是好数,一共有102个。
测试样例
样例1:
输入:
n = 110
输出:102
样例2:
输入:
n = 1000
输出:352
样例3:
输入:
n = 1
输出:1
解题思路:
将数字转化为字符串,获取数字中不同的字符,如果字符数量小于等于2,则计数器加1。
具体代码:
输出结果:
总结:
代码学习千变万化,想要学好一门语言,不仅要有牢固的语言知识,更要锻炼语言能力,多学多练多理解才能学好代码。
遇到难题应该先提取题中知识,应该从哪里下手,做什么,怎么做极为重要,这关乎这我们接下来整体的思路。