博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】Global and Local Inversions
阅读量:5978 次
发布时间:2019-06-20

本文共 1622 字,大约阅读时间需要 5 分钟。

题目如下:

We have some permutation A of [0, 1, ..., N - 1], where N is the length of A.The number of (global) inversions is the number of i < j with 0 <= i < j < N and A[i] > A[j].The number of local inversions is the number of i with 0 <= i < N and A[i] > A[i+1].Return true if and only if the number of global inversions is equal to the number of local inversions. Example 1:Input: A = [1,0,2]Output: trueExplanation: There is 1 global inversion, and 1 local inversion. Example 2:Input: A = [1,2,0]Output: falseExplanation: There are 2 global inversions, and 1 local inversion. Note:A will be a permutation of [0, 1, ..., A.length - 1].A will have length in range [1, 5000].The time limit for this problem has been reduced.

解题思路:这是一个非常有趣的题目。我最初的想法是用一个二层的循环计算出Global的值,然后好Local比较,但是O(n^2)的复杂度显然是不行的,然后我各种优化但是得到的依旧是冷冰冰的Time Exceed Limit.考虑到题目只是要求判断Global是否会等于Local,机智的我果断放弃了计算出Global的值的尝试,开始寻找更巧妙的解法。皇天不负有心人,果然被我找到了。对应任意一个数字A[i]来说,它的Global一定是大于或者等于Local的,也就是说,在整个A中,只要找到任意一个A[i]满足在A[i+2]~A[N-1]里面有一个小于A[i]的数,最终整个数组的Global就一定会大于Local了。为什么不用考虑A[i+1]?无论A[i]和A[i+1]的大小关系如何,Global和Local的值要不分别加1,要么不变,所以不管。那么问题来了,怎么找到任意一个A[i]满足在A[i+2]~A[N-1]里面有一个小于A[i]的数呢?只需要依次遍历数组,找出以遍历元素中的最大值(记为max)和当前遍历到的元素的后面第二个元素(记为A[i+2])比较就行了,如果max > A[i+2] ,那么Global就一定会大于Local了。

代码如下:

class Solution(object):    def isIdealPermutation(self, A):        """        :type A: List[int]        :rtype: bool        """        maxV = -1        for i in range(len(A)-2):            if maxV == -1 or maxV < A[i]:                maxV = A[i]            if maxV > A[i+2]:                return False        return True

 

转载于:https://www.cnblogs.com/seyjs/p/8399986.html

你可能感兴趣的文章
一些设计思想的汇集(2)
查看>>
GRUB and LVM and EVMS
查看>>
List集合的迭代器方法
查看>>
ECShop替换FCKeditor编辑器为KindEditor
查看>>
面向对象是软件开发范式的根本性颠覆: 主体建模, 非目标导向, 松耦合, 非逻辑分解, 软件进化...
查看>>
OSI七层模型和TCP/IP四层模型
查看>>
ceph学习笔记之七 数据平衡
查看>>
windows下的php的memcache扩展的安装及memcache最新下载地址
查看>>
YOLOv3: 训练自己的数据(绝对经典版本1)
查看>>
POJ 1150 The Last Non-zero Digit 《挑战程序设计竞赛》
查看>>
Could not find artifact com.sun:tools:jar:1.5.0 解决办法
查看>>
神经网络---Hessian矩阵
查看>>
TreeMap之floorKey
查看>>
phpstorm xdebug remote配置
查看>>
STL札记3-2(hashtable关联容器set、map)
查看>>
Android 打开屏幕旋转
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
Git fetch和git pull的区别
查看>>
引用与指针的区别
查看>>
pygtk笔记--2.1:布局容器,VBox、Hbox、Alignment
查看>>