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 。
这题博主写了一个哈希表数据结构哦还是很不错的,感兴趣的可以学习一下:
#define size 733
struct hash{
struct hash *next;
int val;
};
void add_hash(struct hash *h,int val){
struct hash *p=(struct hash *)malloc(sizeof(struct hash));
p->val=val;
p->next=h->next;
h->next=p;
}
bool find_hash(struct hash *h,int val){
struct hash *p=h->next;
while(p){
if(p->val==val){
return true;
}
p=p->next;
}
return false;
}
int findMaxK(int* nums, int numsSize){
struct hash *h=(struct hash *)malloc(sizeof(struct hash)*size);
for(int i=0;i<size;i++){
(h+i)->next=NULL;
}
for(int i=0;i<numsSize;i++){
add_hash(h+abs(nums[i])%size,nums[i]);
}
int max=-1;
for(int i=0;i<numsSize;i++){
if(find_hash(h+abs(nums[i])%size,-nums[i])){
max=fmax(max,abs(nums[i]));
}
}
return max;
}