1、二分查找
已知一個(gè)有序數(shù)組, 和一個(gè) key, 要求從數(shù)組中找到 key 對(duì)應(yīng)的索引位置
int binaryFind(int *arr,int len,int key){
int min=0,max=len-1,mid;
while (min <= max) {
mid = (min+max)/2;
if (key < arr[mid]) {
max = mid-1;
} else if (key > arr[mid]) {
min = mid+1;
} else {
return mid;
}
}
return -1;
}
2棕孙、字符串反轉(zhuǎn)
- (void)strReverseTest{
char str[] = "32415";
int len = strlen(str);
for (int i=0; i<(len+1)/2; i++) {
char temp = str[i];
str[i] = str[len-1-i];
str[len-1-i] = temp;
}
NSLog(@"%s",str); // C中打印數(shù)組得for循環(huán),不方便
}
3、有序數(shù)組合并
將有序數(shù)組 {1,4,6,7,9} 和 {2,3,5,6,8,9,10,11,12} 合并為 {1,2,3,4,5,6,6,7,8,9,9,10,11,12}
- (void)arrayMergeTest {
int a[] = {1,4,6,7,9};
int b[] = {2,3,5,6,8,9,10,11,12};
int lenA=5,lenB=9,result[lenA+lenB],i=0,j=0,k=0;
while (i<lenA && j<lenB) {
if (a[i]<b[j]) {
result[k++] = a[i++];
} else {
result[k++] = b[j++];
}
}
while (i<lenA) {
result[k++] = a[i++];
}
while (j<lenB) {
result[k++] = b[j++];
}
NSLog(@"end");
}
4、查找兩個(gè)子視圖的共同父視圖
- (NSMutableArray*)findSuperview:(UIView*)view {
NSMutableArray *array = [NSMutableArray array];
UIView*spView = view.superview;
while (spView) {
[array addObject:spView];
spView = spView.superview;
}
return array;
}
- (NSMutableArray*)findCommonSuperview:(UIView*)view1 view2:(UIView*)view2{
NSMutableArray *array = [NSMutableArray array];
NSArray *superviews1 = [self findSuperview:view1];
NSArray *superviews2 = [self findSuperview:view2];
int len = MIN(superviews1.count,superviews2.count);
for (int i=0; i<len; i++) {
UIView *super1 = superviews1[superviews1.count-1-i];
UIView *super2 = superviews2[superviews2.count-1-i];
if (super1 == super2) {
[array addObject:super1];
} else {
break;
}
}
return array;
}
5儒恋、求無序數(shù)組中的中位數(shù)
中位數(shù):數(shù)組中最中間的那個(gè)數(shù)或最中間的那兩個(gè)數(shù)的平均值
思路:先排序,再求中位數(shù)
float midValue(int arr[], int len){
float mid = (len%2 == 0) ? (arr[len/2] + arr[len/2-1])/2.0 : arr[len/2];
return mid;
}
void midValueSort(int arr[], int len){
for (int i=0; i<len; i++) {
for (int j=0; j<len-1-i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1]=temp;
}
}
}
}
- (void)midValueTest {
int arr[] = {5,1,3,6,100,8};
midValueSort(arr,6);
float mid = midValue(arr, 6);
NSLog(@"%.1f",mid);
}
6黔漂、Hash算法
例:在一個(gè)字符串中找到第一個(gè)只出現(xiàn)一次的字符[核心思想:生成一個(gè)數(shù)組,數(shù)組中存儲(chǔ)每個(gè)字符出現(xiàn)的次數(shù)]
char findFirstChar(char cha[], int len) {
char result = '\0';
int arr[128];
for (int i = 0; i < 128; i++) {
arr[i] = 0;
}
for (int i = 0; i < len; i++) {
arr[cha[i]]++;
}
for (int i = 0; i < len; i++) {
if (arr[cha[i]] == 1) {
result = cha[i];
break;
}
}
return result;
}
- (void)findFirstCharTest {
char cha[] = "aabbcdddf";
char result = findFirstChar(cha, 9);
NSLog(@"%c",result);
}