leetcode每日一题-游戏中弱角色的数量
Posted C+++++++++++++++++++
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode每日一题-游戏中弱角色的数量相关的知识,希望对你有一定的参考价值。
文章目录
题目
解题思路
一句话解决:以第一个字段为标准从大到小排序,然后再遍历数组,对比第二字段的最大值即可。
关键细节:
为了避免第一个字段相同的情况下被更新,所以在排序时采取,攻击力降序防御力升序的方式(关键)来进行。
这样就让第一个字段相同时,按照从左到右的遍历顺序是不可能把第一个字段相同的情况拿来更新 cnt 。
解题代码
注意:golang 的代码中的断言型函数接口有点不一样。。它调用时用的是数组下标的形式来调用。
cpp version
class Solution
public:
//一句话解决:以第一个字段为标准从大到小排序,然后再遍历数组,对比第二字段的最大值即可。
//但为了避免第一个字段相同的情况下被更新,所以在排序时采取,攻击力降序防御力升序的方式(关键)来进行
//这样就让第一个字段相同时,按照从左到右的遍历顺序是不可能把第一个字段相同的情况拿来更新cnt。
int numberOfWeakCharacters(vector<vector<int>>& properties)
int n = properties.size();
auto cmp = [](vector<int>& t1,vector<int>&t2)return t1[0]==t2[0]?t1[1]<t2[1]:t1[0]>t2[0];;
sort(properties.begin(),properties.end(),cmp);
int mx = INT_MIN;
int cnt = 0;
for(int i=0;i<n;i++)
if(mx>properties[i][1])
cnt++;
mx = max(mx,properties[i][1]);
return cnt;
;
java version
class Solution
public int numberOfWeakCharacters(int[][] properties)
Arrays.sort(properties,(o1,o2)-> o1[0]==o2[0]?o1[1]-o2[1]:o2[0]-o1[0]);
int max = -1,cnt = 0;
for(int[] p : properties)
if(p[1]<max)
cnt++;
max = Math.max(max,p[1]);
return cnt;
golang version
func numberOfWeakCharacters(properties [][]int) int
sort.Slice(properties,func (i int,j int) bool//注意这个接口被写死只能用int型
p, q := properties[i], properties[j]
return p[0] > q[0] || p[0] == q[0] && p[1] < q[1]
)
var max = -1
cnt := 0
for _,v := range properties
if max>v[1]
cnt++
max = int(math.Max(float64(max), float64(v[1])))
return cnt
收获
- 被坑了,往二分+哈希表方向去写了。完全没想到之间排序+遍历就能解决。。。
排序的处理非常之精髓。
以上是关于leetcode每日一题-游戏中弱角色的数量的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 1996 游戏中弱角色的数量[自定义排序] HERODING的LeetCode之路
Leetcode刷题100天—5864. 游戏中弱角色的数量( 数组)—day29