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

118 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

🎈算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之,平时进行的算法习题练习带给我们的好处一定是不少的,所以让我们一起来养成算法练习的习惯。今天练习的题目是一道比较简单的题目 -> 与对应负数同时存在的最大正整数

题目描述

给你一个 不包含 任何零的整数数组 nums ,找出自身与对应的负数都在数组中存在的最大正整数 k 。

返回正整数 k ,如果不存在这样的整数,返回 -1 。

示例 1:

输入:nums = [-1,2,-3,3]
输出:3
解释:3 是数组中唯一一个满足题目要求的 k 。

示例 2:

输入:nums = [-1,10,6,7,-7,1]
输出:7
解释:数组中存在 1 和 7 对应的负数,7 的值更大。

示例 3:

输入:nums = [-10,8,6,7,-2,-3]
输出:-1
解释:不存在满足题目要求的 k ,返回 -1 。

提示:

  • 1 <= nums.length <= 1000
  • -1000 <= nums[i] <= 1000
  • nums[i] != 0

思路分析

首先我们要先理解一下题目的意思,题目会给我们一个整数数组 nums,我们需要找出自身与对应的负数都在数组中存在的最大正整数 k,不存在则返回-1。所以我们可以这样做:

  • 1、记录每一个整数是否存在 使用一个hash表来记录每一个存在的数。
let map = {};
for(const num of nums){
    map[num] = true;
}
  • 2、对数组进行排序 将数组按从大到小进行排序,便于后面寻找满足条件的数。
nums = nums.sort((a,b)=>{
   return b - a;
});
  • 3、找到最大的满足条件的整数 因为数组里的数是从大到小进行排序的,所以我们找到的第一个满足条件的整数即是最大的。
 for(const num of nums){
     if(map[num * -1]){
         return num;
     }
 }

完整AC代码如下:

AC代码

/**
 * @param {number[]} nums
 * @return {number}
 */
 var findMaxK = function(nums) {
     let map = {};
     for(const num of nums){
        map[num] = true;
     }
     nums = nums.sort((a,b)=>{
         return b - a;
     });
     for(const num of nums){
         if(map[num * -1]){
             return num;
         }
     }
     return -1;
};

说在后面

🎉这里是JYeontu,喜欢算法,GDCPC打过卡;热爱羽毛球,大运会打过酱油。毕业一年,两年前端开发经验,目前担任H5前端开发,算法业余爱好者,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。