美文网首页
面试题3题目一:找出数组中重复的数字

面试题3题目一:找出数组中重复的数字

作者: 3bd9251f5e09 | 来源:发表于2018-03-23 20:24 被阅读0次

主要思路

主要思路就是数字先生找椅子坐,在没有匹配之前主要的目的就是让0先生、1先生、2先生等人分别做到对应的0座位、1座位、2座位等座位,直到有一个数字先生发现自己所属的座位有一个和自己一模一样的人。

代码

#include<iostream>
using namespace std;

int main()
{
    bool func(int nums[],int length,int *p);
    int a[10] = {2,3,5,2,2,4,6,8,9,1};
    int *p = a;  //指针使用之前要初始化
    func(a,10,p);
    cout<<*p<<endl;
}

bool func(int nums[],int length,int *p)
{
    for(int i=0;i<length;i++)
    {
        cout<<i<<endl;
        while(nums[i] != i)  //人不在合适的位置上
        {
            if(nums[i] == nums[nums[i]]) //发现有人坐到了自己的位置上面
            {
                cout<<nums[i]<<endl;
                *p = nums[i];
                cout<<"not here"<<endl;
                return true;
            }
            //目的是为了nums[nums[i]] = nums[i] //让人做到属于他自己的位置上面
            /*
            这样写代码实在是太丑了
            temp = nums[nums[i]];
            nums[nums[i]] = nums[i]; //key
            nums[i] = temp;
            */
            cout<<"unchanged"<<endl;
            int temp = nums[i];
            nums[i] = nums[temp];
            nums[temp] = temp;
            cout<<"changed"<<endl;
        }
    }
    return false;
}

相关文章

网友评论

      本文标题:面试题3题目一:找出数组中重复的数字

      本文链接:https://www.haomeiwen.com/subject/kczoqftx.html