【字符串】B041_JM_友好序列(思維)

一、Problem

在這裏插入圖片描述
輸入

第一行輸入一個整數N,表示鴿子的數量

第二行輸入 N 個字符,表示每一隻鴿子的朝向。L 表示超向左邊,R 表示朝向右邊。

輸出

輸出一個數字表示答案

8
RLLRRRLL

4

樣例1解釋
將編號爲 1,4,7,8 的鴿子調整轉向

數據規模

2N1000002≤N≤100000, 且 N 爲偶數,

二、Solution

至少要用 O(nlogn)O(nlogn) 算法才能 A 掉…

嘗試一:計數

  • 我的第一想法是統計區間 [0,N/2][0, N/2] 裏面的 L 和 R 的數量記錄到 L1 和 R1 中,以及 [N/2,N][N/2, N] 中的 L 和 R 的數量到 L2 和 R2 中。
  • 然後計算出兩邊的需要調整的數目,取最少。

很不幸,這是片面的 7/15:

import java.util.*;
import java.math.*;
import java.io.*;
public class Main{
	static class Solution {
		void init() {
			Scanner sc = new Scanner(new BufferedInputStream(System.in));
			int n = sc.nextInt();
			char[] s = sc.next().toCharArray();
			int L1 = 0, R1 = 0, L2 = 0, R2 = 0;
			
			for (int i = 0; i < n/2; i++) {
				if (s[i] == 'L') L1++;
				else 			 R1++;
			}
			for (int i = n/2; i < n; i++) {
				if (s[i] == 'L') L2++;
				else 			 R2++;
			}
			System.out.println(Math.min(L1+R2, L2+R1));
		}
	}
    public static void main(String[] args) throws IOException {  
        Solution s = new Solution();
		s.init();
    }
}

複雜度分析

  • 時間複雜度:O(n)O(n)
  • 空間複雜度:O(1)O(1)

方法二:

方法一 WA 的原因可能是我鑽了空子,沒用把題目的條件都用上,比如偶數編號的鴿子一個方向,奇數方向的鴿子一個方向。

也就是說:兩個條件滿足其一即可…

import java.util.*;
import java.math.*;
import java.io.*;
public class Main{
	static class Solution {
		int n;
		char[] s;
		int LR(){
			int ll = 0, lr = 0, rl = 0, rr = 0;
			for (int i = 0; i < n/2; i++) {
				if (s[i] == 'L') ll++;
				else 			 lr++;
			}
			for (int i = n/2; i < n; i++) {
				if (s[i] == 'L') rl++;
				else 			 rr++;
			}
			return Math.min(ll+rr, lr+rl);
		}
		int evenOdd() {
			int oddL = 0, oddR = 0;
			for (int i = 0; i < n; i+=2) {
				if (s[i] == 'L') oddL++;
				if (s[i] == 'R') oddR++;
			}
			int evenL = 0, evenR = 0;
			for (int i = 1; i < n; i+=2) {
				if (s[i] == 'L') evenL++;
				if (s[i] == 'R') evenR++;
			}
			return Math.min(oddL+evenR, evenL+oddR);
		}
		void init() {
			Scanner sc = new Scanner(new BufferedInputStream(System.in));
			n = sc.nextInt();
			s = sc.next().toCharArray();
			int res = Math.min(LR(), evenOdd());
			System.out.println(res);
		}
	}
    public static void main(String[] args) throws IOException {  
        Solution s = new Solution();
		s.init();
    }
}

複雜度分析

  • 時間複雜度:O(n)O(n)
  • 空間複雜度:O(1)O(1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章