iOS開發算法提升二(數組中兩數之和爲固定值返回下標)

題目:

         給定一個整數數組,nums和一個目標值target ,請在數組中找出何爲目標值的兩個整數,並返回下標

         要求:

         不能出國內服利用這個數組中的同一元素,例如:8+8 = 16;         

舉例:

 給定nums = [2,3,9,12],target = 15;

         因爲給定的nums[1] + nums[3] = 3+12 = 15

         所以返回[1,3];

思路一:

 暴力破解法,兩層循環,第一層從初始位置進行遍歷,第二次遍歷第一層之後數組元素,找到兩數之和爲目標值並輸出位置

/**
 暴力破解法
 兩層循環,
 **/
void function1(NSArray *dataArr,int target)
{
    for (int i = 0; i < dataArr.count; i++) {
        //第一層循環從初始位置開始
        for (int j = i+1;j<dataArr.count ; j++) {
            //遍歷i後面值,找到i,j位置和爲目標值,並輸出i,j位置
            if ([dataArr[j] intValue] == target - [dataArr[i] intValue]) {
                NSLog(@"位置分別爲: %d----%d",i,j);
                return;
            }
        }
    }
    NSLog(@"此數組無解");
}

思路二:

 1.先循環遍歷數組:保存一個字典:

 使用字典進行keyValue形式保存數組,key爲值,value爲位置,

 2.再次循環數組,直接計算出需要找到的值,然後判斷字典中key是否存在

 時間複雜度爲O(n)

/**
 思路:
 1.先循環遍歷數組:保存一個字典:
 使用字典進行keyValue形式保存數組,key爲值,value爲位置,
 2.再次循環數組,直接計算出需要找到的值,然後判斷字典中key是否存在
 時間複雜度爲O(n)
 */
void function2(NSArray *dataArr,int target)
{
    
    NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:dataArr.count];
    for (int i = 0; i < dataArr.count; i++) {
        //先遍生成字典,key爲值,value爲位置,
        [dic setValue:@(i) forKey:dataArr[i]];
    }
    for (int i = 0; i <dataArr.count; i++) {
        //獲取差值
        int  complement =target - [dataArr[i] intValue] ;
        //判斷字典中key值有沒有差值元素,切差值元素不是當前遍歷元素
        if ([dic.allKeys containsObject:@(complement)] &&[dic[@(complement)] intValue] != i) {
           NSLog(@"位置分別爲: %d----%@",i,dic[@(complement)]);
            return;
        }
        
    }
   NSLog(@"此數組無解");
}

總結:

作爲iOS開發,其中使用的是iOS中語法,請大家見諒,這個算法不是最優解,只是小編的解法,能夠完成這個,大家可以一起討論學習;

希望對大家有用處,歡迎大家點贊+評論,關注我的CSDN,我會定期做一些技術分享!未完待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章