美文网首页leetcode-OC算法集
632-最小区间-难度:困难

632-最小区间-难度:困难

作者: lorne码农君 | 来源:发表于2020-11-13 17:43 被阅读0次

    你有 k 个 非递减排列 的整数列表。找到一个 最小 区间,使得 k 个列表中的每个列表至少有一个数包含在其中。

    我们定义如果 b-a < d-c 或者在 b-a == d-c 时 a < c,则区间 [a,b] 比 [c,d] 小。

    示例 1:

    
    输入:nums = [[4,10,15,24,26], [0,9,12,20], [5,18,22,30]]
    
    输出:[20,24]
    
    解释:
    
    列表 1:[4, 10, 15, 24, 26],24 在区间 [20,24] 中。
    
    列表 2:[0, 9, 12, 20],20 在区间 [20,24] 中。
    
    列表 3:[5, 18, 22, 30],22 在区间 [20,24] 中。
    
    

    提示:

    nums.length == k

    1 <= k <= 3500

    1 <= nums[i].length <= 50

    -105 <= nums[i][j] <= 105

    nums[i] 按非递减顺序排列

    来源:力扣(LeetCode)

    OC题解

    
    
          NSArray <NSArray *>* allRangeArr = @[@[@(4),@(10),@(15),@(24),@(26)], @[@(0),@(9),@(12),@(20)], @[@(5),@(18),@(22),@(30)]];
    
            //
    
            NSMutableArray *rowArr = [[NSMutableArray alloc]initWithObjects:allRangeArr[0][0],allRangeArr[1][0],allRangeArr[2][0], nil];
    
    
    
            //最小区间值
    
            NSArray *smallestRange = @[@(0),@(0)];
    
    
    
            int minV = 0;
    
            int maxV = INT_MIN;
    
    
    
            //二维数组标记点
    
            int allRangeArr_0 = 0;
    
            int allRangeArr_1 = 0;
    
    
    
            BOOL _slide = YES;
    
            while (_slide) {
    
                //求出最大值
    
              int maxValue = [[rowArr valueForKeyPath:@"@max.intValue"] intValue];
    
              maxV = maxValue;
    
    
    
                //求出最小值
    
              int minValue = [[rowArr valueForKeyPath:@"@min.intValue"] intValue];
    
              minV = minValue;
    
    
    
              //求出最小值-对应的坐标位置-然后将最小坐标值右移一位
    
              for (int i=0; i<rowArr.count; i++) {
    
                  NSNumber * rowNum = rowArr[i];
    
                  if (rowNum.intValue == minV) {
    
                      //取出最小值对应二维数组的坐标
    
                      NSArray *minArr = allRangeArr[i];
    
                      allRangeArr_0 = i;
    
                      allRangeArr_1 = (int)[minArr indexOfObject:rowNum];
    
    
    
                      allRangeArr_1 ++;//坐标右移一位
    
                      if (allRangeArr_1 >= minArr.count) {
    
                          //移动结束
    
                          _slide = NO;
    
                      }else{
    
                          //将最小值右移一位
    
                          [rowArr replaceObjectAtIndex:allRangeArr_0 withObject:allRangeArr[allRangeArr_0][allRangeArr_1]];
    
                      }
    
                      break;
    
                  }
    
              }
    
    
    
            }
    
    
    
            smallestRange = @[@(minV),@(maxV)];
    
    
    
            NSLog(@"smallestRange=%@",smallestRange);
    
            //smallestRange=(20,24)
    
    

    相关文章

      网友评论

        本文标题:632-最小区间-难度:困难

        本文链接:https://www.haomeiwen.com/subject/khlbbktx.html