Contains Duplicate III
给定一个数组nums,判断该数组中是否存在第i个元素和第j个元素满足:
1、abs(i - j) <= k
2、abs(nums[i] - nums[j]) <= t
class Solution {
public:
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
if(k < 0 || t < 0) return false;//abs(i-j)和abs(num[i]-num[j])都会大于等于0
int size = nums.size();
if((1 == size) || (0 == k)) return true;
if(size < 1) return false;
if(size < k) k = size;
int i = 0;
int j = 0;
for(i=0; i<(size-k); i++)
{
for(j=(i+1); j<=(i+k); j++)
{
if(abs(nums[i] - nums[j]) <= t)
{
//printf("i=%d, j=%d\n", i, j);
return true;
}
}
}
return false;
}
};
void trimLeftTrailingSpaces(string &input) {
input.erase(input.begin(), find_if(input.begin(), input.end(), [](int ch) {
return !isspace(ch);
}));
}
void trimRightTrailingSpaces(string &input) {
input.erase(find_if(input.rbegin(), input.rend(), [](int ch) {
return !isspace(ch);
}).base(), input.end());
}
vector<int> stringToIntegerVector(string input) {
vector<int> output;
trimLeftTrailingSpaces(input);
trimRightTrailingSpaces(input);
input = input.substr(1, input.length() - 2);
stringstream ss;
ss.str(input);
string item;
char delim = ',';
while (getline(ss, item, delim)) {
output.push_back(stoi(item));
}
return output;
}
int stringToInteger(string input) {
return stoi(input);
}
string boolToString(bool input) {
return input ? "True" : "False";
}
int main() {
string line;
while (getline(cin, line)) {
vector<int> nums = stringToIntegerVector(line);
getline(cin, line);
int k = stringToInteger(line);
getline(cin, line);
int t = stringToInteger(line);
bool ret = Solution().containsNearbyAlmostDuplicate(nums, k, t);
string out = boolToString(ret);
cout << out << endl;
}
return 0;
}