1. 程式人生 > 其它 >【Lintcode】884. Find Permutation

【Lintcode】884. Find Permutation

技術標籤:# 二分、位運算與數學leetcode演算法java

題目地址:

https://www.lintcode.com/problem/find-permutation/description

給定一個只含 I I I D D D的長 n − 1 n-1 n1的字串 s s s。要求返回一個恰好含 1 ∼ n 1\sim n 1n的長 n n n的陣列 t t t,使得 s [ i ] = I ⇔ t [ i + 1 ] > t [ i ] s[i]=I\Leftrightarrow t[i+1]>t[i] s[i]=It[i+1]>t[i],且 s [ i ] = D ⇔ t [ i + 1 ] < t [ i ] s[i]=D\Leftrightarrow t[i+1]<t[i]

s[i]=Dt[i+1]<t[i]。返回符合要求的字典序最小的陣列。

參考https://blog.csdn.net/qq_46105170/article/details/111027516。程式碼如下:

public class Solution {
    /**
     * @param s: a string
     * @return: return a list of integers
     */
    public int[] findPermutation(String s) {
        // write your code here
        int[] res = new
int[s.length() + 1]; for (int i = 0; i < res.length; i++) { res[i] = i + 1; } for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == 'D') { int j = i; while (j < s.length() && s.charAt(j) == 'D') {
j++; } reverse(res, i, j); i = j; } } return res; } private void reverse(int[] A, int i, int j) { for (; i < j; i++, j--) { int tmp = A[i]; A[i] = A[j]; A[j] = tmp; } } }

時間複雜度 O ( n ) O(n) O(n)