From 04e949948c1da1adc3b90b802aab5f1b747b9f4c Mon Sep 17 00:00:00 2001 From: Vally Date: Mon, 19 Oct 2015 23:56:36 +0300 Subject: [PATCH] added FindTheDuplicateNumber --- .../findTheDuplicateNumber.cpp | 44 +++++++++++++++++++ .../findTheDuplicateNumber.cpp~ | 0 2 files changed, 44 insertions(+) create mode 100644 algorithms/cpp/findTheDuplicateNumber/findTheDuplicateNumber.cpp create mode 100644 algorithms/cpp/findTheDuplicateNumber/findTheDuplicateNumber.cpp~ diff --git a/algorithms/cpp/findTheDuplicateNumber/findTheDuplicateNumber.cpp b/algorithms/cpp/findTheDuplicateNumber/findTheDuplicateNumber.cpp new file mode 100644 index 0000000..63f7f16 --- /dev/null +++ b/algorithms/cpp/findTheDuplicateNumber/findTheDuplicateNumber.cpp @@ -0,0 +1,44 @@ +// Source : https://leetcode.com/problems/find-the-duplicate-number/ +// Author : Calinescu Valentin +// Date : 2015-10-19 + +/*************************************************************************************** + * + * Given an array nums containing n + 1 integers where each integer is between 1 and + * n (inclusive), prove that at least one duplicate number must exist. + * Assume that there is only one duplicate number, find the duplicate one. + * + * Note: + * You must not modify the array (assume the array is read only). + * You must use only constant, O(1) extra space. + * Your runtime complexity should be less than O(n2). + * There is only one duplicate number in the array, but it could be repeated more than + * once. + * Credits: + * Special thanks to @jianchao.li.fighter for adding this problem and creating all test + * cases. + * + ***************************************************************************************/ + + + +/* + * Solutions + * ========= + * + * A simple solution would be to sort the array and then look for equal consecutive elements. + * + * Time Complexity: O(N log N) + * Space Complexity: O(1) + * + */ +#include +class Solution { +public: + int findDuplicate(vector& nums) { + sort(nums.begin(), nums.end()); + for(vector::iterator it = nums.begin(); it != nums.end(); ++it) + if(*it == *(it + 1)) + return *it; + } +}; diff --git a/algorithms/cpp/findTheDuplicateNumber/findTheDuplicateNumber.cpp~ b/algorithms/cpp/findTheDuplicateNumber/findTheDuplicateNumber.cpp~ new file mode 100644 index 0000000..e69de29