力扣287.寻找重复数

时间:2024-11-06 07:39:23

1.哈希表法

#include<stdio.h>
#include<stdlib.h>
int func(int *arr,int len)
{
    int *hash=(int *)malloc(sizeof(int)*len);
    for(int i=0;i<len;i++)
    {
        if(hash[arr[i]]==1)
        {
            free(hash);
            return arr[i];
        }
        hash[arr[i]]=1;
    }
        free(hash);
        return -1;
}

int main()
{
    int arr[5]={1,3,4,2,2};
    int len=sizeof(arr)/arr[0];
    int result=func(arr,len);
    printf("%d",result);
}



2.环形链表

#include<stdio.h>
#include<stdlib.h>
int func(int *arr,int len)
{
    int slow=arr[0];
    int fast=arr[0];
    do
    {
        slow=arr[slow];//arr[arr[0]]
        fast=arr[arr[fast]];//arr[arr[arr[0]]]
    } while (slow!=fast);
    slow=arr[0];
    while(slow!=fast)
    {
        slow=arr[slow];
        fast=arr[fast];
    }
    return slow;   
}

int main()
{
    int arr[5]={1,3,4,2,2};
    int len=sizeof(arr)/arr[0];
    int  result=func(arr,len);
    printf("%d ",result);
}

扩展重复的字符串

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* func(char *arr[],int len)
{
    for(int i=0;i<len;i++)
    {
        for(int j=0;j<i;j++)
        {
            if((strcmp(arr[i],arr[j]))==0)
            {
                return arr[i];
            }
        }
    }
}

int main()
{
    char *arr[]={"apple","bnana","grape","apple","orange"};
    int len=sizeof(arr)/sizeof(arr[0]);
    char* result=func(arr,len);
    printf("%s ",result);


}

对象扩展

#include<iostream>
using namespace std;
class Student
{
public:
    string name;
    int age;
    Student (string name="",int age=0):name(name),age(age)
    {
    }
    bool operator==(const Student &a )
    {
        return (a.name==this->name);
    }

};

int func(int *arr,int len)
{
    int *hash=(int *)malloc(sizeof(int)*len);
    for(int i=0;i<len;i++)
    {
        if(hash[arr[i]]==1)
        {
            free(hash);
            return arr[i];
        }
        hash[arr[i]]=1;
    }
    free(hash);
    return -1;
}

int main()
{
    Student s1("apple1",1);
    Student s2("apple",1);
    s1==s2;
    if(s1==s2)
    {
       cout<<"yes"<<endl;
    }else
    {
        cout<<"no"<<endl;
    }

    // int arr[5]={1,3,4,2,2};
    // int len=sizeof(arr)/arr[0];
    // int  result=func(arr,len);
    // printf("%d ",result);


}