HackerRank "New Year Chaos"

本文介绍了一种使用归并排序算法计算数组中逆序对数量的方法,并提出了一种检查数组是否过于混乱的策略。如果数组中的任意元素与其初始位置相差超过两个位置,则认为数组过于混乱。

Two tricks here:

1. Counting no. of inversed pairs - using Merge Sort, nothing special

2. How to check 'chaotic'? We simply check if any number is over 2 slots away from its own slot : )

#!/bin/python3

import sys

ret = 0
def merge(arr1, arr2):
    global ret
    if not arr1: return arr2
    if not arr2: return arr1
    for v2 in arr2:
        arr1.append(v2)
        i = len(arr1) - 1
        while(i > 0):
            if arr1[i] < arr1[i - 1]:
                arr1[i - 1],arr1[i] = arr1[i], arr1[i - 1]
                i -= 1
                ret += 1
            else:
                break
    return arr1

def mergeSort(arr):
    n = len(arr)
    if (n < 2): return arr    
    return merge(mergeSort(arr[:n//2]), mergeSort(arr[n//2:]))

T = int(input().strip())
for _ in range(T):
    ret = 0
    n = int(input().strip())
    q = [int(q_temp) for q_temp in input().strip().split(' ')]
    # your code goes here
    bTooCh = False
    for i in range(n):
        if q[i] - i > 3:
            bTooCh = True
            break
    if bTooCh:
        print ("Too chaotic")
        continue
    
    mergeSort(q)
    print (ret)

转载于:https://www.cnblogs.com/tonix/p/5468216.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值