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

2018-03-23  本文已影响0人  3bd9251f5e09

主要思路

主要思路就是数字先生找椅子坐,在没有匹配之前主要的目的就是让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;
}
上一篇 下一篇

猜你喜欢

热点阅读