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

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,哈希表,排序双指针)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Daxiuy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值