美文网首页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-最小区间-难度:困难

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

  • 基础九 线段树Segment Tree

    线段树功能: O(logN) 找到某区间的 最大最小值 元素个数 区间和 O(1) 得到全部区间的 最大最小值 元...

  • 还不知道起个什么标题

    不说那些有的没的了,直接上干货~ 最小区间覆盖问题 题目:视野争夺 理解:最小区间覆盖问题(给定n个区间和一个...

  • 2018-04-03线段树讲解

    线段树插叙区间最大最小和

  • [day8] [LeetCode] [title435,5]

    435. 无重叠区间 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。 注意: 可以认为区间的...

  • 选择排序

    思想:分已排序区间和未排序区间。每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。 使用

  • T435、无重叠区间

    给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间...

  • 20180101初级英语Day49

    Coach Shane's E cubed A. 632- to be on the level with som...

  • LeetCode-python 41.缺失的第一个正数

    题目链接难度:困难 类型: 数组、桶排序 给定一个未排序的整数数组,找出其中没有出现的最小的正...

  • Leetcode 精选之贪心思想( 无重叠区间)

    题目描述 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。 注意: 可以认为区间的终点总是大于...

网友评论

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

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