哈希集合¶
去除重复字符¶
例如:fabccdeeffacb打印fabcde 每个字符打印一次
#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;
//接收一个字符串作为输入,并返回去除重复字符后的结果字符串。
string removeDuplicates(string str) {
string result; //存储最终结果
unordered_set<char> seen; // 用于存储已经出现过的字符
//遍历字符串中的每个字符,如果当前字符不在seen集合中,则将其添加到result字符串和seen集合中。
for (char ch : str) {
if (seen.find(ch) == seen.end()) {
// 如果当前字符未出现过,则添加到结果字符串和哈希集合中
result += ch;
seen.insert(ch);
}
}
return result;//返回去除重复字符后的结果
}
int main() {
string str = "fabccdeeffacb";
string result = removeDuplicates(str);
cout << "Result: " << result << endl;//Result: fabcde
return 0;
}
从数组中找出重复的元素¶
例如:[1, 2, 1, 7, 4, 5, 2, 6, 5] 打印结果1, 2, 5
从给定的数组中找出重复的元素,并将它们打印出来,可以使用哈希集合(unordered_set)来跟踪已经出现过的元素。
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
void printDuplicates(const vector<int>& nums) {
unordered_set<int> seen; // 用于存储已经出现过的元素
unordered_set<int> duplicates; // 用于存储重复的元素
for (int num : nums) {
if (seen.find(num) != seen.end()) {
// 如果当前元素已经出现过,则添加到重复元素集合中
duplicates.insert(num);
}
seen.insert(num);
}
cout << "Duplicate elements: ";
for (int num : duplicates) {
cout << num << " ";
}
cout << endl;
}
int main() {
vector<int> nums = {1, 2, 1, 7, 4, 5, 2, 6, 5};
printDuplicates(nums);//Duplicate elements: 1 2 5
return 0;
}
数组随机10条数据¶
- (NSArray *)randomArray:(NSArray *)array {
//小于等于10条的直接返回原数组
if (array.count <11) {
return array;
}
NSMutableArray *tempArray = [NSMutableArray arrayWithArray:array];
NSMutableSet *randomSet = [[NSMutableSet alloc] init];
while ([randomSet count] < 10) {
int r = arc4random() % [tempArray count];
[randomSet addObject:[tempArray objectAtIndex:r]];
//从选择源中删除已经选中的 已经选中的不必再次选中
[tempArray removeObjectAtIndex:r];
}
return [randomSet allObjects];
}
数组合并¶
合并两个数组,相同的元素不重复添加。
Objective-C语言 两个数组: 数组1:@[ @{@"aaa":@"dss"} @{@"bbb":@"fsaf"} @{@"ccc":@"fdgh"} @{@"ddd":@"gfg"} @{@"eee":@"gfdsg"} @{@"fff":@"ewq"} @{@"ggg":@"gerr"}]
数组2:@[ @{@"aaa":@"fdsf"} @{@"hhh":@"retr"} @{@"jjj":@"fdgrterh"} @{@"ddd":@"cxvz"}]
将上面两个数组合并为一个数组 要求如果数组2中元素字典的key在数组1中已经存在,则不添加。只添加不一样的。
方法:
为了合并两个数组并满足上面的要求,可以遍历数组2,并检查其元素(字典)的key是否已经在数组1中存在。如果不存在,我们将其添加到数组1中。这里是Objective-C代码的一个示例:
NSArray *array1 = @[
@{@"aaa": @"dss"},
@{@"bbb": @"fsaf"},
@{@"ccc": @"fdgh"},
@{@"ddd": @"gfg"},
@{@"eee": @"gfdsg"},
@{@"fff": @"ewq"},
@{@"ggg": @"gerr"}
];
NSArray *array2 = @[
@{@"aaa": @"fdsf"},
@{@"hhh": @"retr"},
@{@"jjj": @"fdgrterh"},
@{@"ddd": @"cxvz"}
];
NSMutableArray *mergedArray = [NSMutableArray arrayWithArray:array1];
NSMutableSet *existingKeys = [NSMutableSet set];
// 首先将所有array1中的key加入到existingKeys集合中
for (NSDictionary *dict in array1) {
[existingKeys addObjectsFromArray:[dict allKeys]];
}
// 遍历array2,检查key是否在existingKeys集合中
for (NSDictionary *dict in array2) {
NSString *keyInDict2 = [[dict allKeys] firstObject];
if (![existingKeys containsObject:keyInDict2]) {
[mergedArray addObject:dict];
[existingKeys addObject:keyInDict2]; // 将新添加的key加入到existingKeys集合中
}
}
// 输出合并后的数组
NSLog(@"Merged Array: %@", mergedArray);
这段代码首先创建了一个可变数组mergedArray
,它初始化为包含array1
的所有元素。然后创建了一个可变集合existingKeys
来存储已经存在的key。我们遍历array1
将所有的key添加到existingKeys
中。
接下来,我们遍历array2
中的每个元素,检查其key是否已经在existingKeys
中。如果不在,我们就将这个元素添加到mergedArray
中,并将新的key加入到existingKeys
集合中。
最后,我们打印出合并后的数组。这样,mergedArray
就只包含了不重复key的元素,满足了您的要求。
这种的使用set,分开遍历两个数组,要比双层for循环时间复杂度要低。