开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第29天,点击查看活动详情
题目描述
给你一个 不包含 任何零的整数数组 nums ,找出自身与对应的负数都在数组中存在的最大正整数 k 。
返回正整数 k ,如果不存在这样的整数,返回 -1 。
来源:力扣(LeetCode)
- 示例 1
输入:nums = [-1,2,-3,3]
输出:3
解释:3 是数组中唯一一个满足题目要求的 k 。
- 示例 1
输入: nums = [-1,10,6,7,-7,1]
输出: 7
解释: 数组中存在 1 和 7 对应的负数,7 的值更大。
- 示例 1
输入: nums = [-10,8,6,7,-2,-3]
输出: -1
解释: 不存在满足题目要求的 k ,返回 -1 。
提示:
1 <= nums.length <= 1000-1000 <= nums[i] <= 1000nums[i] != 0
思路分析
根据题意可知,题目给出一个没有任何零的整数数组 nums ,在数组nums中找出自身与对应的负数都在数组中存在的最大正整数 k 。返回正整数 k ,如果不存在这样的整数,返回 -1。
这道题的重点在于判断相对应的正负数相加等于0,这样就可以取出所有符合条件的数字;将获取到的数字转化为正整数,因为可能获取到的负数。再判断获取到的数字的大小。
首先,声明一个变量存储最大数,初始值为-1。循环数组,一层循环是不够的,必须来两层循环,外层循环从0开始,内层循环从i+1开始。每个都与其他数字做一次运算,若是两数相加,结果等于0,那么这两个数就互为正反数,符合规则要求;将数值转为正整数,再和result值比大小,取最大值,然后再它返回出去。若是循环结束了,一个符合规则的都没有,就返回原始值-1。
AC代码
function solution(nums) {
let result = -1;
for(let i=0; i<nums.length-1; i++) {
for(let j=i+1; j<nums.length; j++) {
if(nums[i] + nums[j] === 0) {
let num = Math.abs(nums[i]);
result = Math.max(num, result);
}
}
}
console.log(result);
}
let nums = [-1,10,6,7,-7,1]
solution(nums);