题解 | #数组中重复的数字#

数组中重复的数字

https://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524

方法一:借助辅助数组

基本思路

创建一个记录数字已出现次数的数组,每次该数字记录更新则判断一次是否大于1,是则直接输出并退出循环

#include <iostream>
#include <vector>
#define MAX_SIZE 10000

using namespace std;

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param numbers int整型vector 
     * @return int整型
     */
    int duplicate(vector<int>& numbers) {
        // write code here
	  
	  	// 数组非法判定
        if (numbers.size() <= 0) {
            cout << -1;
            return -1;
        }

        int result;  // 最终输出答案
        int count[MAX_SIZE] = {0};
        for (int number : numbers) {
            count[number]++;
            if (count[number] > 1) {
                result = number;
                break;
            }
        }

        cout << result;

        return result;
    }
};

方法二:数组重排

基本思路:

对数组重新排序,在排序过程中会有比较的过程,如果有相等的情况则可以输出返回

#include <iostream>
#include <vector>

using namespace std;

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param numbers int整型vector
     * @return int整型
     */
    int duplicate(vector<int>& numbers) {
        // write code here
        if (numbers.size() <= 0) {
            cout << -1;
            return -1;
        }

        int index = 0, length = numbers.size();
        while (index < length) {
            if (numbers[index] == index) {
                index++;
                continue;
            } else {
                if (numbers[numbers[index]] == numbers[index]) {
                    // 如果当前指针所指位置上的数字 == 该数字所指示的数组位置上的数字
                    // 说明该数字即为所求重复数字
                    cout << numbers[index];
                    return numbers[index];
                } else {
                    // 如果不等,则调整位置
                    swap(numbers[numbers[index]], numbers[index]);
                }
            }
        }

        return 0;
    }
};

#剑指offer#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务