2.给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
ex
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
var maxSubArray = function (nums) {
// 初始化一个总数
let ans = nums[0]
// 初始化一个计算的值
let sum = 0
for(let num in nums) {
// 如果sum 小于0的话 无论他怎么加 最后的结果都是总数变小 所以 如果sum > 0 的话 才可以将num 和sum进行累加
// 反之将sum的值进行替换 直到他大于零为止
if (sum > 0){
sum += num
} else {
sum = num
}
// 将ans 和 sum 进行比较 取最大值
ans = Math.max(ans, sum)
}
return ans
}
3.给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
先确定边界算法 判断是否为负数 如果为负数将其转换成绝对值
通过% 模运算取出参数的最后一位 进行进位累加
x降位
var reverse = function(x) {
let overFlow = function (x) {
return x >= Math.pow(2, 31) - 1 || x <= -Math.pow(2, 31) - 1 ? 0 : x
}
x = overFlow(x)
let isNegative = x < 0
if (isNegative) {
x = -x
}
let a = 0
while(x != 0) {
a = a * 10 + x % 10
x = parseInt(x / 10)
}
return isNegative ? overFlow(-a) : overFlow(a)
};