题目
给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
- 示例1:
输入: [1,2,3,1]
输出: true
- 示例2:
输入: [1,2,3,4]
输出: false
解法1
- 对数组进行排序;
- 遍历排序后的数组,若相邻数据相同,则包含重复数据;否则不包含。
BOOL checkDuplicateNumber1(NSArray<NSNumber *>* targetInfo) {
if (targetInfo.count <= 1) {
return NO;
}
// 1.排序
NSArray *sortedInfo = [targetInfo sortedArrayUsingComparator:^NSComparisonResult(NSNumber* _Nonnull obj1, NSNumber* _Nonnull obj2) {
// obj1比obj2,升序;用obj2比obj1,降序
return [obj1 compare:obj2];
}];
// 2.查看相邻两数是否相同
NSNumber *lastObj;
for (NSNumber *currentObj in sortedInfo) {
if (!lastObj) {
lastObj = currentObj;
continue;
}
if (currentObj.integerValue == lastObj.integerValue) {
return YES;
}
lastObj = currentObj;
}
return NO;
}
解法2
转换为NSSet集合对象,若元素数少于原数组,则包含重复数据。
BOOL checkDuplicateNumber2(NSArray<NSNumber *>* targetInfo) {
if (targetInfo.count <= 1) {
return NO;
}
// 转化为NSSet对象,若元素比原数组少,则有相同数据
NSSet *setInfo = [NSSet setWithArray:targetInfo];
return setInfo.count != targetInfo.count;
}
网友评论