一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

劍指Offer(35):數(shù)組中的逆序對

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-10 22:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

劍指Offer(35):數(shù)組中的逆序對

一、引子

這個系列是我在??途W(wǎng)上刷《劍指Offer》的刷題筆記,旨在提升下自己的算法能力。
查看完整的劍指Offer算法題解析請點擊CSDN和github鏈接:
劍指Offer完整習題解析CSDN地址
github地址

二、題目

在數(shù)組中的兩個數(shù)字,如果前面一個數(shù)字大于后面的數(shù)字,則這兩個數(shù)字組成一個逆序對。輸入一個數(shù)組,求出這個數(shù)組中的逆序對的總數(shù)P。并將P對1000000007取模的結果輸出。 即輸出P%1000000007

輸入描述:

題目保證輸入的數(shù)組中沒有的相同的數(shù)字
數(shù)據(jù)范圍:

對于%50的數(shù)據(jù),size<=10^4

對于%75的數(shù)據(jù),size<=10^5

對于%100的數(shù)據(jù),size<=2*10^5

事例1:

輸入:

1,2,3,4,5,6,7,0

輸出:

7

1、思路

首先我們先明白題目的意思,比如一個數(shù)組{7,5,6,4},它的逆序對總共有五對,{7,5},{7,6},{7,4},{5,4},{6,4} 只要是前面比后面大就組成一個逆序對。

看到這個題目,我們的第一反應是順序掃描整個數(shù)組。每掃描到一個數(shù)組的時候,逐個比較該數(shù)字和它后面的數(shù)字的大小。如果后面的數(shù)字比它小,則這兩個數(shù)字就組成了一個逆序對。假設數(shù)組中含有n個數(shù)字。由于每個數(shù)字都要和O(n)這個數(shù)字比較,因此這個算法的時間復雜度為O(n^2)。

現(xiàn)在用上面說的這種方式是一種時間復雜度比較高的一種,我們換一種思路,采用歸并排序的方法。

先把數(shù)組分解成兩個長度為2的子數(shù)組,再把這兩個子數(shù)組分解成兩個長度為1的子數(shù)組。接下來一邊合并相鄰的子數(shù)組,一邊統(tǒng)計逆序對的數(shù)目。在第一對長度為1的子數(shù)組{7}、{5}中7>5,因此(7,5)組成一個逆序對。同樣在第二對長度為1的子數(shù)組{6},{4}中也有逆序對(6,4),由于已經(jīng)統(tǒng)計了這兩對子數(shù)組內(nèi)部的逆序對,因此需要把這兩對子數(shù)組進行排序,避免在之后的統(tǒng)計過程中重復統(tǒng)計。

逆序對的總數(shù) = 左邊數(shù)組中的逆序對的數(shù)量 + 右邊數(shù)組中逆序對的數(shù)量 + 左右結合成新的順序數(shù)組時中出現(xiàn)的逆序對的數(shù)量

2、編程實現(xiàn)

python

代碼實現(xiàn)方案:

# -*- coding:utf-8 -*-
class Solution:
    def InversePairs(self, data):
        # write code here
        if not data:
            return 0
        temp = [i for i in data]
        return self.mergeSort(temp, data, 0, len(data)-1) % 1000000007
    def mergeSort(self, temp, data, low, high):
        if low >= high:
            temp[low] = data[low]
            return 0
        mid = (low + high) / 2
        left = self.mergeSort(data, temp, low, mid)
        right = self.mergeSort(data, temp, mid+1, high)
        count = 0
        i = low
        j = mid+1
        index = low
        while i <= mid and j <= high:
            if data[i] <= data[j]:
                temp[index] = data[i]
                i += 1
            else:
                temp[index] = data[j]
                count += mid-i+1
                j += 1
            index += 1
        while i <= mid:
            temp[index] = data[i]
            i += 1
            index += 1
        while j <= high:
            temp[index] = data[j]
            j += 1
            index += 1
        return count + left + right

分享技術,樂享生活:我們的公眾號計算機視覺這件小事每周推送“AI”系列資訊類文章,歡迎您的關注!

本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!

審核編輯 黃昊宇
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 人工智能
    +關注

    關注

    1806

    文章

    49014

    瀏覽量

    249450
  • 機器學習
    +關注

    關注

    66

    文章

    8503

    瀏覽量

    134603
  • 數(shù)組
    +關注

    關注

    1

    文章

    420

    瀏覽量

    26542
  • 深度學習
    +關注

    關注

    73

    文章

    5561

    瀏覽量

    122794
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    offer 06.從頭到尾打印鏈表

    編程語言
    jf_40173672
    發(fā)布于 :2022年07月25日 09:43:38

    動態(tài)規(guī)劃與貪婪法題的背包問題總結

    【LeetCode & offer刷題】動態(tài)規(guī)劃與貪婪法題16:背包問題總結
    發(fā)表于 06-09 16:44

    聚辰半導體通用MCU應用

    聚辰半導體通用MCU應用 聚辰半導體有限公司的前身是美國ISSI(Integrated Silicon Solution)全資控股子公司芯成半導體(上海)有限
    發(fā)表于 03-19 08:52 ?1259次閱讀

    C語言教程之逆序存放數(shù)據(jù)

    C語言教程之逆序存放數(shù)據(jù),很好的C語言資料,快來學習吧。
    發(fā)表于 04-25 15:03 ?0次下載

    逆序算法程序

    逆序算法程序,其實也不是那么難,就分享一下,希望大家別介意
    發(fā)表于 05-19 14:31 ?8次下載

    介紹了數(shù)組和簇數(shù)據(jù)類型以及創(chuàng)建和使用數(shù)組和簇的方法

    數(shù)組索引從0開始。 也就是說,如果一維(1D)數(shù)組包含n個元素,那么索引范圍就是0~n – 1,其中索引0數(shù)組的第一個元素,索引n
    發(fā)表于 11-16 18:13 ?1.3w次閱讀
    介紹了<b class='flag-5'>數(shù)組</b>和簇數(shù)據(jù)類型以及創(chuàng)建和使用<b class='flag-5'>數(shù)組</b>和簇的方法

    java數(shù)組的三種定義方式_java數(shù)組的定義及使用方法(推薦)

    java數(shù)組是一種很常用的工具,本文將介紹來java數(shù)組的三種定義方式以及java數(shù)組
    發(fā)表于 01-29 09:53 ?3.3w次閱讀

    Offer(37):數(shù)字在排序數(shù)組中出現(xiàn)的次數(shù)

    搜索微信公眾號:'AI-ming3526'或者'計算機視覺這件小事' 獲取更多算法、機器學習干貨 csdn:[鏈接] github:[鏈接]
    的頭像 發(fā)表于 12-10 22:40 ?321次閱讀

    如何對一維數(shù)組做maxpooling

    最近在offer里看到一道算法題很有意思,分享給大家。
    的頭像 發(fā)表于 04-11 08:41 ?3245次閱讀

    C 語言數(shù)組的基本結構

    的元素 求數(shù)組中元素的最短距離 求兩個有序數(shù)組的共同元素 求三個數(shù)組的共同元素 找出數(shù)組唯一的重復元素 找出出現(xiàn)奇數(shù)次的元素 求
    的頭像 發(fā)表于 06-22 10:56 ?875次閱讀

    數(shù)組的定義 什么是數(shù)組

    數(shù)組 數(shù)組是內(nèi)置類型,是一組同類型數(shù)據(jù)的集合,它是值類型,通過從0開始的下標索引訪問元素值。 在初始化后長度是固定的,無法修改其長度。當作為方法的參數(shù)傳入時將復制一份數(shù)組而不是引用同一
    的頭像 發(fā)表于 10-09 09:39 ?2421次閱讀

    聲明數(shù)組語法及應用案例

    數(shù)組是相同數(shù)據(jù)類型的元素的集合。支持固定長度或可變的一維和多維數(shù)組。簡單來說:數(shù)組將相同數(shù)據(jù)類型的標簽的連續(xù)集合體用一個名稱表示。
    的頭像 發(fā)表于 10-23 09:41 ?917次閱讀
    聲明<b class='flag-5'>數(shù)組</b>語法及應用案例

    labview怎么查數(shù)組相同元素的個數(shù)

    要查找LabVIEW數(shù)組相同元素的個數(shù),可以使用以下步驟: 創(chuàng)建一個包含要查找的數(shù)值的數(shù)組。這可以通過手動輸入數(shù)組元素或從文件/其他數(shù)據(jù)
    的頭像 發(fā)表于 12-28 16:42 ?4997次閱讀

    PHP數(shù)組的使用方法!

    PHP數(shù)組的使用方法! PHP是一種廣泛使用的網(wǎng)絡編程語言,它的數(shù)組功能非常強大且靈活。數(shù)組是一種數(shù)據(jù)結構,它允許我們在單個變量存儲多個
    的頭像 發(fā)表于 01-12 15:11 ?808次閱讀

    數(shù)組和鏈表在內(nèi)存的區(qū)別 數(shù)組和鏈表的優(yōu)缺點

    數(shù)組和鏈表在內(nèi)存的區(qū)別 數(shù)組和鏈表的優(yōu)缺點? 數(shù)組和鏈表是常見的數(shù)據(jù)結構,用于組織和存儲數(shù)據(jù)。它們在內(nèi)存的存儲方式以及優(yōu)缺點方面存在一些
    的頭像 發(fā)表于 02-21 11:30 ?1538次閱讀