与对应负数同时存在的最大正整数

120 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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] <= 1000
  • nums[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);