序列交换

原创 2017年06月17日 10:27:34

牛牛有一个长度为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();
    }

}
版权声明:本文为博主原创文章,若需转载,请注明http://blog.csdn.net/qq_30091945

相关文章推荐

SPX序列分组交换协议.txt

  • 2009年05月08日 19:09
  • 954B
  • 下载

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

题目描述:(minimum swaps) Given a sequence, we have to find the minimum no of swaps required to sort the...
  • whz_zb
  • whz_zb
  • 2012年04月24日 22:34
  • 1161

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

题目1:给出一个序列,只交换相邻两数,使得序列升序排列,求出最少交换次数。思路:如果说只是交换相邻两个数字。那么就是这个序列的逆序数。1.假设序列个数为n,我们先把最大的数换到最后,因为是相邻数字交换...
  • codeTZ
  • codeTZ
  • 2016年04月14日 16:12
  • 1622

LeetCode 24 Swap Nodes in Pairs(交换序列中的结点)(Linked List)

翻译给定一个链表,调换每两个相邻节点,并返回其头部。例如, 给定 1->2->3->4, 你应该返回的链表是 2->1->4->3。你的算法必须使用唯一不变的空间。你也不能修改列表中的值,只有节点本身...
  • NoMasp
  • NoMasp
  • 2015年11月12日 18:43
  • 3925

交换序列a,b中的元素,使|sum(a)-sum(b)|最小 [No. 49]

有两个序列a,b,大小都为n,序列元素的值任意整数,无序. 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。 例如:    int[] a = {100,...

32.交换使两个序列差最小

题目: 有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。例如:   var a=[100,99,98,1,...

【Good Bye 2014B】【Floyd or 并查集】New Year Permutation 全排列有位置交换序列 使得字典序尽可能小

New Year Permutation time limit per test 2 seconds memory limit per test 256 megabytes ...

经典算法之6:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小

[微软]有两个序列a,b,大小都为n,序列元素的值任意整数,无序; 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小 分类: 算法与数据结构 2012-04-29 ...

1.将数组A中的内容和数组B中的内容进行交换。(数组一样大) 2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。 3.将三个数按从大到小输出。 4.求两个数的最大公约数。

#define _CRT_SECURE_NO_WARNINGS 1 #include #include //1.将数组A中的内容和数组B中的内容进行交换。(数组一样大) //void swap...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:序列交换
举报原因:
原因补充:

(最多只允许输入30个字)