关闭

序列交换

标签: 牛客网在线编程
705人阅读 评论(2) 收藏 举报

牛牛有一个长度为n的整数序列s,羊羊要在牛牛的序列中选择不同的两个位置,然后交换这两个位置上的元素。现在需要求出羊羊交换后可以得到的不同的序列个数。(注意被交换的两元素值可能相同)。
如序列{1, 47},输出1.羊羊必须交换仅有的两个元素,得到序列{47, 1}。羊羊必须交换,不能保留原有的序列。
{1, 2, 1},输出3.羊羊通过交换可以得到{2, 1, 1},{1, 1, 2},{1, 2, 1}这三个序列。
输入描述:
输入包括两行,第一行为一个整数n(2 ≤ n ≤ 50),即序列的长度。
第二行n个整数,表示序列的每个元素a_i(1 ≤ a_i ≤ 50),以空格分割。

输出描述:
输出一个整数,表示羊羊可以得到的不同的序列个数

输入例子:
3
1 2 1

输出例子:
3


PS:这个不知道为什么卡了10%,希望有大神能帮帮我。
这里写图片描述

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;

/*
 * 利用hashset的特性,先交换位置不同的两个数
 * 然后放入hashset中即可,之后在把已经交换的俩个数交换回来
 */

public class Main {

    static ArrayList<Integer> Num = new ArrayList<>(); 
    static HashSet<ArrayList<Integer>> set = new HashSet<>();

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        for(int i = 0 ; i < N ; i++){
            Num.add(in.nextInt());
        }

        for(int i = 0 ; i < N ; i++){
            for(int j = 0 ; j < N ; j++){
                if(i != j){
                    Collections.swap(Num, i, j);
                    set.add(Num);
                    Collections.swap(Num, i, j);
                }
            }
        }
        System.out.println(set.size());
        in.close();
    }

}
0
0
查看评论

现有一个n个整数的序列,你要做的就是交换两个数的位置直到整个序列按照升序排列,那么将这个整数序列排好序,需要交换多少次?例如,1,2,3,5,4,我们只需要交换一次,即将5和4交换即可。

现有一个n个整数的序列,你要做的就是交换两个数的位置直到整个序列按照升序排列,那么将这个整数序列排好序,需要交换多少次?例如,1,2,3,5,4,我们只需要交换一次,即将5和4交换即可。 一、 c/c++实现 #include using namespace std; // #includ...
  • taotaoah
  • taotaoah
  • 2016-04-11 16:21
  • 1283

给定一个01串(仅由‘ 0’或‘1’组成的字符串),现在想把这个数字串排序成“非递减”有序序列,请问至少需要多少次交换(任意两个位置交换)

给定一个01串(仅由‘ 0’或‘1’组成的字符串),现在想把这个数字串排序成“非递减”有序序列,请问至少需要多少次交换(任意两个位置交换)?  输入描述: 输入数据第一行是一个正整数T(T<=100),表示有T组测试数据; 接下来的T行,每行给出01串。 数据保证—— 50%...
  • u010667082
  • u010667082
  • 2015-09-11 16:15
  • 2022

[编程题] 序列交换

牛牛有一个长度为n的整数序列s,羊羊要在牛牛的序列中选择不同的两个位置,然后交换这两个位置上的元素。现在需要求出羊羊交换后可以得到的不同的序列个数。(注意被交换的两元素值可能相同)。 如序列{1, 47},输出1.羊羊必须交换仅有的两个元素,得到序列{47, 1}。羊羊必须交换,不能保留原有的序列。...
  • W_X_C
  • W_X_C
  • 2017-08-04 13:58
  • 255

八个算法题

一、 *牛牛有n张卡片排成一个序列.每张卡片一面是黑色的,另一面是白色的。 * 初始状态的时候有些卡片是黑色朝上,有些卡片是白色朝上。 * 牛牛现在想要把一些卡片翻过来,得到一种交替排列的形式,即每对相邻卡片的颜色都是不一样的。 * 牛牛想知道最少需要翻转多少张卡片可以...
  • LCBSSG
  • LCBSSG
  • 2017-07-29 22:38
  • 453

现有一个n个整数的序列,你要做的就是交换两个数的位置直到整个序列按照升序排列,那么将这个整数序列排好序,需要交换多少次?

这里是用冒泡排序编的代码来实现降序和升序: 大概步骤为: i=0,j=1,2,3; i=1,j=2,3; i=2,j=3; i=3,j=4;(j var a = "4 3 2 1"; var b = a.replace(/\s+/g,""); var c =...
  • Xiaoxiao_Zheng
  • Xiaoxiao_Zheng
  • 2017-09-22 21:30
  • 155

使序列有序的最少交换次数(minimum swaps)

题目描述:(minimum swaps) Given a sequence, we have to find the minimum no of swaps required to sort the sequence.   分析: formula:  no. of element...
  • gzw1623231307
  • gzw1623231307
  • 2017-02-22 07:12
  • 101

面试题精选(84):使序列有序的最少交换次数(minimum swaps) + 删除序列中所有重复的元素

题目描述:(minimum swaps)Given a sequence, we have to find the minimum no of swaps required to sort the sequence. 分析:formula:  no. of elements ou...
  • yysdsyl
  • yysdsyl
  • 2009-06-30 20:20
  • 4169

最少交换次数 UVA 10573 Meeting with Aliens

交换元素使序列有序的题有两类,第一种是只能交换相邻元素使序列有序,求最小交换次数,假如是是序列升序,只需要求逆序对数。第二种是可以交换任意两个位置的元素,使之有序,求最小交换次数,答案是数字的个数减去交换数字形成的环(置换环)的个数。比如 {5 1 3 2 4 7 6  8 } ,求将这个...
  • lov_vol
  • lov_vol
  • 2015-12-03 10:27
  • 391

使序列有序的最少交换次数

题目1:给出一个序列,只交换相邻两数,使得序列升序排列,求出最少交换次数。思路:如果说只是交换相邻两个数字。那么就是这个序列的逆序数。1.假设序列个数为n,我们先把最大的数换到最后,因为是相邻数字交换,所以把最大数交换到最后,需要交换的次数为最大数后的数字个数。2.当完成最大数的交换后,可以将最大数...
  • codeTZ
  • codeTZ
  • 2016-04-14 16:12
  • 1946

zzuli OJ 1120: 最值交换

Description 有一个长度为n的整数序列。请写一个程序,先把序列中的最小值与第一个数交换,再把最大值与最后一个数交换。输出转换好的序列。 分别编写两个函数MinIndex()和MaxIndex()来计算最小值下标和最大值下标。 int MinIndex(int a[],...
  • sinat_25926481
  • sinat_25926481
  • 2015-11-29 14:56
  • 3880
    个人资料
    • 访问:153998次
    • 积分:4894
    • 等级:
    • 排名:第6915名
    • 原创:327篇
    • 转载:0篇
    • 译文:0篇
    • 评论:80条
    博客专栏
    最新评论