当前位置 : 主页 > 编程语言 > 其它开发 >

力扣算法JS LC [406. 根据身高重建队列] LC [452. 用最少数量的箭引爆气球]

来源:互联网 收集:自由互联 发布时间:2022-07-17
菜鸡刷算法的一天,每天分享两题算法,大家有这个想法的,可以给我个关注,然后一起坚持每天的算法之旅。希望我们共同进步,一起加油。 ### LC [406. 根据身高重建队列](https://lee
菜鸡刷算法的一天,每天分享两题算法,大家有这个想法的,可以给我个关注,然后一起坚持每天的算法之旅。希望我们共同进步,一起加油。

### LC [406. 根据身高重建队列](https://leetcode.cn/problems/queue-reconstruction-by-height/)

 

假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。

 

请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。

 

示例 1:

 

```

输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]

输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]

解释:

编号为 0 的人身高为 5 ,没有身高更高或者相同的人排在他前面。

编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。

编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。

编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。

编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。

编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。

因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。

```




示例 2:

 

```

输入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]

输出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]

```

 

**解题思路:先以身高排序,在以 k 进行排序。然后将排序后的按照 k ,从头到尾顺序的放进 queqe**

 

**代码:**

 

```javascript

var reconstructQueue = function(people) {

    let queue = [];

    people.sort((a,b) => {

        if(a[0] !== b[0]) {

            return b[0] - a[0]

        } else {

            return a[1] - b [1]

        }

    })

 

    for(let i = 0; i < people.length; i++) {

        queue.splice(people[i][1], 0, people[i])

    }

    return queue;

};

```




### LC [452. 用最少数量的箭引爆气球](https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/)

 

有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。

 

一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足  xstart ≤ x ≤ xend,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。

 

给你一个数组 points ,返回引爆所有气球所必须射出的 最小 弓箭数 。



示例 1:

 

```

输入:points = [[10,16],[2,8],[1,6],[7,12]]

输出:2

解释:气球可以用2支箭来爆破:

-在x = 6处射出箭,击破气球[2,8]和[1,6]。

-在x = 11处发射箭,击破气球[10,16]和[7,12]。

```

 

**示例 2:**

 

```

输入:points = [[1,2],[3,4],[5,6],[7,8]]

输出:4

解释:每个气球需要射出一支箭,总共需要4支箭。

```

 

示例 3:

 

```

输入:points = [[1,2],[2,3],[3,4],[4,5]]

输出:2

解释:气球可以用2支箭来爆破:

 

- 在x = 2处发射箭,击破气球[1,2]和[2,3]。

- 在x = 4处射出箭,击破气球[3,4]和[4,5]。

```

 

**解题思路:先按照结束坐标值进行排序,比对下一个的开始坐标值与前面的结束坐标的值进行比较**

 

**代码:**

 

```javascript

var findMinArrowShots = function(points) {

    points.sort((a,b) => { //以结束坐标做升序操作

        return a[1] - b[1];

    })

    let res = 1;

    let pos = points[0][1];//拿到第一个值的结束坐标的值

    for(let i = 1; i < points.length; i++) {

        if(points[i][0] > pos) { //判断下一个值的开始值是否大于这个结束坐标的值

            pos = points[i][1];

            res++

        }

    }

    return res;

};

```

 

上一篇:mybatis 拦截器
下一篇:没有了
网友评论