用oc写一个算法,找到有序数组中第一个只出现一次的数
时间: 2023-03-31 12:00:18 浏览: 82
可以使用哈希表来解决这个问题。首先遍历一遍数组,将每个数出现的次数记录在哈希表中。然后再遍历一遍数组,找到第一个出现次数为1的数即可。时间复杂度为O(n),空间复杂度为O(n)。以下是示例代码:
```
- (NSInteger)findFirstUniqueNumberInArray:(NSArray *)array {
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (NSNumber *num in array) {
NSInteger count = [dict[num] integerValue];
dict[num] = @(count + 1);
}
for (NSNumber *num in array) {
if ([dict[num] integerValue] == 1) {
return [num integerValue];
}
}
return -1;
}
```
相关问题
OC传参一个数组
在 OC 中,可以使用 NSArray 或 NSMutableArray 对象来传递一个数组。例如,可以将一个整型数组传递给一个 OC 方法:
```objective-c
- (void)processIntArray:(NSArray *)array {
for (NSNumber *number in array) {
int value = [number intValue];
// 处理整数值
}
}
```
这里将整型数组作为 NSArray 对象传递给 processIntArray 方法。在方法内部使用 for-in 循环遍历数组,然后通过 [number intValue] 方法将 NSNumber 对象转换为整数值进行处理。
如果需要传递一个可变的数组,可以使用 NSMutableArray 类型:
```objective-c
- (void)processMutableArray:(NSMutableArray *)array {
[array addObject:@"new object"];
// 其他操作
}
```
这里将可变数组作为 NSMutableArray 对象传递给 processMutableArray 方法。在方法内部可以使用 addObject: 方法添加新元素,或者使用其他方法对数组进行操作。
在调用 OC 方法时,可以直接将数组对象作为参数传递:
```objective-c
NSArray *intArray = @[@1, @2, @3];
[self processIntArray:intArray];
NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"one", @"two", nil];
[self processMutableArray:mutableArray];
```
这里分别将 intArray 和 mutableArray 作为参数传递给 processIntArray 和 processMutableArray 方法。
OC 定义一个byte 数组,但是数组的长度不确定,怎么定义呢?
在 OC 中,可以使用指针来定义一个长度不确定的 byte 数组。具体实现可以参考以下代码:
```
unsigned char *byteArray;
```
这样定义后,可以动态分配内存来存储 byte 数组。例如,可以使用 malloc 函数来分配一段指定长度的内存,如下所示:
```
byteArray = (unsigned char *)malloc(sizeof(unsigned char) * length);
```
其中,length 是数组的长度。这样就可以动态创建一个长度不确定的 byte 数组了。需要注意的是,在使用完数组后,需要手动释放内存,以避免内存泄漏,可以使用 free 函数来释放内存,如下所示:
```
free(byteArray);
```