首页 > 其他分享 >454. 四数相加 II C

454. 四数相加 II C

时间:2024-02-28 22:14:35浏览次数:22  
标签:count 四数 hash tem int sum 454 II find

自己写了一个hash表。

原来学过的数据结构关于hash的那章还是有实际用的,不是书架子。

typedef struct node{
    int sum;
    int count;
    struct node* repeatnext;
}hash;

void init_hashtable(hash h[]){
    for(int i=0;i<127;i++){
        h[i].sum=0;
        h[i].count=0;
        h[i].repeatnext=NULL;
    }
}

hash* find_hash(hash h[],int i){
    int t=abs(i) % 127;
    if(h[t].sum==i){
        return &h[t];
    }
    hash* tem=h[t].repeatnext;
    while(tem){
        if(tem->sum==i) return tem;
        tem=tem->repeatnext;
    }
    return NULL;
}

void inset_hash(hash h[],int i){
    int t=abs(i)%127;
    if(h[t].count==0){
        h[t].sum=i;
        h[t].count++;
    }else{
        if(find_hash(h,i)){
            find_hash(h,i)->count++;
        }else{
            hash* tem=(hash*)malloc(sizeof(hash));
            tem->sum=i;
            tem->count=1;
            tem->repeatnext=h[t].repeatnext;
            h[t].repeatnext=tem;
        }
    }
}

int fourSumCount(int* nums1, int nums1Size, int* nums2, int nums2Size, int* nums3, int nums3Size, int* nums4, int nums4Size){
    hash h[127];
    init_hashtable(h);
    int n=nums1Size;
    int sum=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            inset_hash(h,nums1[i]+nums2[j]);
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            int x=nums3[i]+nums4[j];
            if(x>0){
                if(find_hash(h,0-x)){
                    sum+=find_hash(h,0-x)->count;
                }
            }else{
                if(find_hash(h,abs(x))){
                    sum+=find_hash(h,abs(x))->count;
                }
            }
        }
    }
    return sum;
}

结果:

标签:count,四数,hash,tem,int,sum,454,II,find
From: https://www.cnblogs.com/llllmz/p/18041886

相关文章

  • yolo7检测学习Bubbliiiing的视频有感——(2)FileNotFoundError: [Errno 2] No such file
    这个问题作为老程序员是不应该犯的,因为只是相对路径和绝对路径的问题按照步骤将对应的数据集放入目录后,运行voc_annotation.py想要生成两个txt文件,结果发现报错FileNotFoundError:[Errno2]Nosuchfileordirectory其实就是classes_path和VOCdevkit_path的路径不对,像我自己......
  • yolo7检测学习Bubbliiiing的视频有感——(1)no model named 'cv2'
    我一直以来也是喜欢用vscode,就跟随B导安装了vscode下载完B导提供的代码后如果想直接跟着视频B导的操作运行predict.py文件是不可能的,需要按照readme文档中的所有提示按照步骤放入所有文件首先针对nomodelnamedcv2这个错误我按照网上的教程先在terminal窗口查询自己是否安装......
  • 350. 两个数组的交集 II C
    /***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/intmin(inti,intj){if(i<j)returni;returnj;}int*intersect(int*nums1,intnums1Size,int*nums2,intnums2Size,int*returnSize){inthash1[1001]=......
  • 142. 环形链表 II C
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*detectCycle(structListNode*head){if(!head||!head->next)returnNULL;structListNode*slow=head;s......
  • IIS部署 HTTP 错误 500.19 - Internal Server Error 解决步骤 由于权限不足而无法
    配置应用程序池的身份 调整文件和文件夹权限确保应用程序池的身份有权访问网站的目录和文件在网站中进行配置1.添加2.高级3.立即查找找到所需身份名称后添加权限 至少需要读取权限,如果应用程序需要写入文件或目录,则还需要写入权限 ......
  • day44 动态规划part6 代码随想录算法训练营 518. 零钱兑换 II
    题目:518.零钱兑换II我的感悟:递推公式,我没写错。是初始化写错了。这种求多少种的,要考虑1种,是空集合选1中。而那些考虑能背最大的价值,要从0初始化,0的含义值无价值。 理解难点:递推公式,是累加dp[j]+=dp[j-conins[i]]初始化的含义 dp[0]=1听课笔记: 代码示例:cl......
  • CF1034E Little C Loves 3 III 题解
    这道题与P6097【模板】子集卷积基本相同,但是每个元素的值属于\([0,3]\),且\(n\le21\),时限\(\rm1s\)。在做P6097这道题的时候,我们多开了一维用来记录二进制下\(1\)的个数。但是这道题每个元素的值只属于\([0,3]\),我们可以用一种十分巧妙的方法:我们设\(f(x)\)表示\(......
  • 【力扣】反转链表II
    题目描述思路老样子,还是先用递归试试。在基本问题中,也就是left==rigth或者left+1==right时,直接将两个元素调换顺序即可。我突然发现代码随想录里好像讲过一个用双指针法反转链表的算法。那道题是把整个链表翻转,代码如下://双指针法classSolution{public:ListN......
  • 2050 并行课程 III
    原题链接题解:拓扑排序+动态规划我们首先根据给定的先修课程关系,构建出一个有向无环图。已知每个结点的时间都是time[i-1]+其入度结点的最大值。最后比较出最大的出度为零的结点的时间code classSolution{public:staticconstintN=5e4+5;inthead[N],Next[N]......
  • day43 动态规划part5 代码随想录算法训练营 1049. 最后一块石头的重量 II
    题目:1049.最后一块石头的重量II我的感悟:复习了昨天的模板是不一样,今天这个我推出来了。哈哈 理解难点:按照昨天的思路,dp[target]里面是能凑出来的最大值。a是另外能凑出来的和。diff是两者的差。听课笔记:我自己先写出的代码:classSolution:deflastStoneW......