持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情
前言
小白算法比较菜,希望能激励我每日更新,从leetcode第一题开始,2022年目标300题,记录从0到1的全过程!!
力扣第 315 场周赛-力扣
力扣第 315 场周赛-力扣
a了三题,第一题第二题比较简单,几分钟就做了。第三题没想到暴力可以过,真是想了半天,还wa了一次。第四题坐牢。
因为第三题耽误太长时间,排名贼靠后,又要掉分了!!
第314双周赛的排名
第88双周赛的排名
第313周赛的排名
2441. 与对应负数同时存在的最大正整数
给你一个 不包含 任何零的整数数组 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] <= 1000nums[i] != 0
代码
两个做法
一是排序后,双指针,当nums[l]+num[r] = x,x小于0时,左指针右移,x大于0时候,右指针左移。
时间复杂度0(nlogn) 空间复杂度O(1)
方法二,哈希表,没什么复杂的,直接暴力搜就行了。
//双指针
class Solution {
public int findMaxK(int[] nums) {
Arrays.sort(nums);
int l = 0;
int r = nums.length - 1;
while(l < r) {
if(nums[l] + nums[r] == 0) {
return nums[r];
} else if(nums[l] + nums[r] > 0) {
r--;
} else {
l++;
}
}
return -1;
}
}
//哈希表
class Solution:
def findMaxK(self, nums: List[int]) -> int:
ans = -1
s = set()
for x in nums:
if -x in s: ans = max(ans, abs(x))
s.add(x)
return ans
第二题连接如下-2442.反转之后不同整数的数目
2442.反转之后不同整数的数目
第三题连接如下-2443.反转之后数字和
2443.反转之后数字和
3.结束
又是掉分的一场周赛,第三题不应该困扰那么长时间的。我当时看好多人都做出来了,想的是,是不是直接return false或者是什么啊,还wa了一次。gogogo,刷题刷题,每天一道,三年1000道!!!!