leetcode 493. 翻转对(分治算法)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 493. 翻转对(分治算法)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
給定一個(gè)數(shù)組 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我們就將 (i, j) 稱作一個(gè)重要翻轉(zhuǎn)對(duì)。
你需要返回給定數(shù)組中的重要翻轉(zhuǎn)對(duì)的數(shù)量。
示例 1:
輸入: [1,3,2,3,1]
輸出: 2
代碼
class Solution {public int reversePairs(int[] nums) {return getReversePairs(nums,0,nums.length-1);}public int getReversePairs(int[] nums,int l,int r) {if(l>=r) return 0;int mid=(l+r)/2;int ret=getReversePairs(nums, l, mid)+getReversePairs(nums, mid+1, r);//將左右數(shù)組排序,并統(tǒng)計(jì)結(jié)果int i=l,j=mid+1;while (i<=mid)//統(tǒng)計(jì)左右數(shù)組的反轉(zhuǎn)對(duì){while (j<=r&&(long)nums[i]>2*(long)nums[j])j++;ret+=j-mid-1;i++;}int []temp=new int[r-l+1];int p=0,p1=l,p2=mid+1;while (p1<=mid||p2<=r)//歸并{if(p1>mid)temp[p++]=nums[p2++];else if(p2>r)temp[p++]=nums[p1++];else if(nums[p1]>=nums[p2])temp[p++]=nums[p2++];else temp[p++]=nums[p1++];}for(int k=0;k<temp.length;k++) nums[l+k]=temp[k];//寫回原來(lái)數(shù)組return ret;} }總結(jié)
以上是生活随笔為你收集整理的leetcode 493. 翻转对(分治算法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: leetcode 454. 四数相加 I
- 下一篇: leetcode 976. 三角形的最大