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

文章介绍了如何在不含零的整数数组中找到与对应负数同时存在的最大正整数。方法包括排序后使用双向指针,暴力枚举以及哈希表结合排序双指针。对于每种方法,都讨论了其实现细节和效率。
摘要由CSDN通过智能技术生成

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

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

目录

方法一:(个人思路)

方法二:(官方题解)暴力枚举

auto用法

using namespace std的优缺点(单纯想到,与此题无关)

方法三:官方题解(见leetcode,哈希表,排序双指针)


方法一:(个人思路)

1.将数组排序,由小到大。

2.双向奔赴,设置i为第一个数,j为最后一个数,两者相加等于0时就是存在对应负数并且最大的正整数;若是在第i个位置的数和第j个数相加大于零,则右侧j减少,也就是j减1;相加小于零同理。

class Solution {
public:
    int findMaxK(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int k = -1;
        int i = 0, j = nums.size()-1;
        while (i < j && nums[i] < 0) {
		if (nums[i] + nums[j] == 0) {
			k = nums[j];
			break;
		} else if (nums[i] + nums[j] < 0) {
			i++;
		} else if (nums[i] + nums[j] > 0) {
			j--;
		}
	}
        return k;
    }
};

方法二:(官方题解)暴力枚举

1.思路:从头到尾遍历数组中的所有数,如果这个数的相反数也在数组中存在,则满足题目条件,和上一个数比较,输出最大值。

2.补充知识(本人初学者):

auto用法

auto是C++11引入的关键字 

 优点:

  • 如果表达式的类型发生变化,包括函数返回类型变化时,它仍然可以正常工作。
  • 性能:你可以保证没有类型转换。
  • 可用性:你不用担心类型名的拼写和错误。
  • 效率:你的编码可以更高效。

使用方法 :

  • 在声明变量时,用 auto 代替类型,并指定一个初始化表达式。
  • 你可以用 const, volatile, * , & , && 等修饰符来修改 auto 的含义。
  • 编译器会根据初始化表达式来推断变量的类型。

使用 auto 时要注意的限制有:

  • auto 不能和其他类型说明符混合使用。
  • 使用 auto 声明的变量必须有初始化表达式。
  • auto 不能用于声明类型或转换类型。
  • auto声明的变量列表中的所有变量都要有初始化表达式。
class Solution {
public:
    int findMaxK(vector<int>& nums) {
        int k = -1;
        for (auto x : nums) {
            auto p = find(nums.begin(), nums.end(), -x);
            if (p != nums.end()) {
                k = max(k, x);
            }
        }
        return k;
    }
};

比如:在代码中的第一个auto---int,第二个auto---vector<int>::iterator;

using namespace std的优缺点(单纯想到,与此题无关)

using namespace std 是一种在 C++ 中使用标准库的简便方式,它可以让你省去在每次调用标准库中的函数或类型时写 std:: 的麻烦。(来自new bing)

使用 using namespace std 的优点有:

  • 简洁:你可以直接写 cout, string, vector 等,而不用写 std::cout, std::string, std::vector 等。
  • 便捷:你可以节省输入的时间和精力,避免拼写错误。

使用 using namespace std 的缺点有:

  • 污染:你可能会不小心引入了一些和标准库同名的函数或类型,导致命名冲突或歧义。
  • 不清晰:你可能会忘记某个函数或类型是来自于哪个命名空间,导致代码的可读性降低。
  • 不灵活:你可能会想要在某些地方使用标准库中的函数或类型,而在其他地方使用自定义的或其他库中的函数或类型,这时候 using namespace std 就会带来不便。

因此,一般不建议全局使用using namespace std,而是在局部范围或者针对特定的函数使用using的声明。

方法三:官方题解(见leetcode,哈希表,排序双指针)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Daxiuy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值