本文主要是介绍(63)交替数字和(64)找到最高海拔,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1. 每日一言
- 2. 题目(63)交替数字和
- 3. 解题思路
- 4. 代码
- 5. 题目(64)找到最高海拔
- 6. 解题思路
- 7. 代码
- 8. 结语
1. 每日一言
柳下系船犹未稳,能几日,又中秋。
出自 宋⋅ 刘过 的《唐多令》
2. 题目(63)交替数字和
题目链接:交替数字和
给你一个正整数 n 。n 中的每一位数字都会按下述规则分配一个符号:
最高有效位 上的数字分配到 正 号。
剩余每位上数字的符号都与其相邻数字相反。
返回所有数字及其对应符号的和。
-
示例 1:
输入:n = 521
输出:4
解释:(+5) + (-2) + (+1) = 4 -
示例 2:
输入:n = 111
输出:1
解释:(+1) + (-1) + (+1) = 1 -
示例 3:
输入:n = 886996
输出:0
解释:(+8) + (-8) + (+6) + (-9) + (+9) + (-6) = 0
提示:
1 <= n <= 109
3. 解题思路
-
首先,先通过循环计算出输入整数 n 的位数,这里使用了一个临时变量 tmp 来存储 n 的值,然后进行除以10的操作,每除一次,就将位数 sum 加一。这一步骤是为了后续计算偶数位数和奇数位数的数字和作准备。
-
接下来是对输入整数按照位数的奇偶进行不同操作的判断:
-
如果位数 sum 是偶数,那么就需要按照奇偶位交替地给数字添加正负号,并计算交替数字和,也就是偶数位上的数字带负号,奇数位上的数字带正号,然后将它们相加得到最终结果。
-
如果位数 sum 是奇数,同样需要按照奇偶位交替地给数字添加正负号,并计算交替数字和,也就是奇数位上的数字带正号,偶数位上的数字带负号,然后将它们相加得到最终结果。
-
最后,返回计算得到的交替数字和作为函数的返回值。
以上的太麻烦了,换一个
-
首先,定义变量 sum 用于存储最终的交替数字和的结果,定义变量 f,并初始化为 1,用来控制每一位数字的正负符号。
-
接下来通过循环对输入整数 n 进行处理,每次取 n 的个位数字(n%10),然后乘以当前的符号 f,将这个结果累加到 sum 中。然后,通过将 n 除以 10,以便在下一次循环中处理下一位数字,并且更新符号 f 为 -f,以实现交替的符号添加。
-
最后,通过返回 -f 乘以 sum,来确保最终的结果是带上正确的数字符号的。
4. 代码
int alternateDigitSum(int n) {int sum = 0;//统计n有几位int tmp = n;//临时存储n的值while(tmp) {tmp/=10;sum++;}tmp = n;if(sum%2 == 0)//偶数{sum = 0;int f = -1;//控制数字符号while(tmp) {sum += (tmp%10)*f;tmp /= 10;f = -f;}}else {sum = 0;int f = 1;//控制数字符号while(tmp) {sum += (tmp%10)*f;tmp /= 10;f = -f;}}return sum;
}
改进一下
int alternateDigitSum(int n) {int sum = 0;//统计n有几位int f = 1;while(n) {sum+=(n%10)*f;n/=10;f=-f;}return sum*(-f);
}
最后的return语句有点绕,详细解释一下
举个例子
// 5 2 1
// 1 -2 +5 = 4(此时 f = -1)
// 4 * (- f) = 4 值不变(而且这个值就是我们想要的)// 1 2
// 2 - 1 = 1(此时 f = 1)
// 1 * (- f) = -1(此时这个值是我们想要的)
总结一下:标志位f刚开始是1。如果n是奇数位数字,最后累加的结果是正确的,但是f最后是-1,所以sum*(-f)还是res,结果不变;如果n是偶数位数字,最后的结果sum是真正的答案的相反数,而f最后是1,所以sum*(-f)刚好把计算结果取相反数,能得到正确的答案。
5. 题目(64)找到最高海拔
题目链接:找到最高海拔
有一个自行车手打算进行一场公路骑行,这条路线总共由 n + 1 个不同海拔的点组成。自行车手从海拔为 0 的点 0 开始骑行。
给你一个长度为 n 的整数数组 gain ,其中 gain[i] 是点 i 和点 i + 1 的 净海拔高度差(0 <= i < n)。请你返回 最高点的海拔 。
-
示例 1:
输入:gain = [-5,1,5,0,-7]
输出:1
解释:海拔高度依次为 [0,-5,-4,1,1,-6] 。最高海拔为 1 。 -
示例 2:
输入:gain = [-4,-3,-2,-1,4,3,2]
输出:0
解释:海拔高度依次为 [0,-4,-7,-9,-10,-6,-3,-1] 。最高海拔为 0 。
提示:
n == gain.length
1 <= n <= 100
-100 <= gain[i] <= 100
6. 解题思路
读懂题目就会发现他是如此的简单
-
首先定义两个变量 sum 和 max,分别用于记录当前的海拔高度变化总和以及历史最大海拔高度。
-
接下来通过一个 for 循环遍历整个 gain 数组,在每次迭代中,累加当前的海拔变化 gain[i] 到 sum 变量中,并且判断是否出现了更高的海拔高度(即 sum 是否大于 max),如果是则更新 max 为当前的海拔高度。
-
最终,返回 max 变量,即为数组 gain 中的最大海拔高度。
7. 代码
int largestAltitude(int* gain, int gainSize) {int sum = 0;int max = 0;for(int i = 0; i < gainSize; i++) {sum+=gain[i];if(max < sum) {max = sum;}}return max;
}
8. 结语
请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!
都看到这里啦!真棒(*^▽^*)
可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家
编程小白写作,如有纰漏或错误,欢迎指正
这篇关于(63)交替数字和(64)找到最高海拔的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!