2023 网易笔试题 (I) 0923

笔试时间:2023年9月23日 秋招

备注:第四题暂无题解

第一题

题目:小红的有序数组

小红有一个长度为n的数组,数组下标为0到n - 1,每次可以交换下标为i和(i + 2)%n的数,请问小红能否通过有限次交换使得数组变成一个单调不减的数组。

输入描述

第一行一个整数t,表示数据组数。

接下来t组数据,每组数据第一行一个整数n,表示数组长度。

每组数据第二行n个整数ai;,表示数组的值。

1<= t <= 10

1 <= n <= 10^5

1 <= ai <= 10^9

输出描述

对于每组数据,如果能够通过有限次交换使得数组变成一个单调不减的数组,输出"YES”,否则输出"NO”。

样例输入

2

4

1 4 3 2

4

4 3 2 1

样例输出

YES

NO

提示

第一组数据,交换下标为1和3的数,变成[1,2,3,4]单调不减。

参考题解

交换的传递性,即a与b能够交换,b与c能够交换,那么a与c能够交换。对于n的奇偶分情况讨论。

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.*;

public class Main {

    public static String isPossibleToSort(int n, int[] a) {
        if (n % 2 == 1) {
            return "YES";
        }

        List<Integer> b0 = new ArrayList<>();
        List<Integer> b1 = new ArrayList<>();
        for (int i = 0; i < n; ++i) {
            if (i % 2 == 0) {
                b0.add(a[i]);
            } else {
                b1.add(a[i]);
            }
        }

        Collections.sort(b0);
        Collections.sort(b1);

        for (int i = 0; i < n; ++i) {
            a[i] = (i % 2 == 0) ? b0.get(i / 2) : b1.get(i / 2);
        }

        for (int i = 1; i < n; ++i) {
            if (a[i] < a[i - 1]) {
                return "NO";
            }
        }

        return "YES";
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt();

        while (T-- > 0) {
            int n = scanner.nextInt();
            int[] arr = new int[n];
            for (int i = 0; i < n; ++i) {
                arr[i] = scanner.nextInt();
            }

            System.out.println(isPossibleToSort(n, arr));
        }
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

def is_possible_to_sort(n, a):
    if n % 2 == 1:
        return "YES"

    b0 = sorted(a[::2])
    b1 = sorted(a[1::2])

    sorted_arr = [0] * n
    for i in range(n):
        sorted_arr[i] = b0[i // 2] if i % 2 == 0 else b1[i // 2]

    return "YES" if sorted_arr == sorted(a) else "NO"


T = int(input())
for _ in range(T):
    n = int(input())
    arr = list(map(int, input().split()))
    print(is_possible_to_sort(n, arr))

第二题

题目:小红的相似字符串

小红认为两个字符串相似,需要这两个字符串的每个字母的个数都相等。如"abcbd"和"dbcba"相似,"abcd"和"abcd"相似,而"abb"和"aab"不相似,"ac"和"cca"不相似。现在小红有n个字符串,她想知道有多少对字符串是相似的

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2023 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务