交换座位

交换座位

http://www.nowcoder.com/questionTerminal/24f41669379a4d9fa1fc3237838faa13

题目描述
在一场集体婚礼上,有n对新人需要坐在连续排列的 2n个座位上合影,同一对新人彼此挨着。由于进场时各对新人并未按序入座,请计算最少交换座位的次数,以便使每对新人均可并肩坐在一起。一次交换可选择任意两人,让他们互换座位。
全部新人的序号可用 0 到 2n-1 的整数表示,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是 (2n-2, 2n-1)。
row[i]指最初坐在第 i 个座位上的新人编号,i是从0到(2n-1)的一个升序全排列,row不存在重复值。

输入描述
输入共有2行,第一行为n,即共有多少对新人(2≤n≤100000 ),第二行为row,即2n个座位上的初始新人编号。

输出描述:
输出最少交换座位的次数。
示例1
输入
2
0 2 1 3
输出

1
思路
//1从左到右判断一个数的奇偶,用i记录位置
//2如果为偶数r,则判断下一个是否为r+1;
//3如果为偶数r,则判断下一个是否为r-1;
//4如果是则继续向后判断,返回1
//5如果不是则向后寻找r+1或r-1,记录其位置j,找到后交换i+1和j的位置,count+1
//6当i等于2n-1时,结束

import java.util.Scanner;
public class Add {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int m =0;
    while(m<10){
    String nstr = in.nextLine();
    int n = Integer.parseInt(nstr);
    int[] nums = new int[2*n];
    String haoStr = in.nextLine();
    String[] haoStrArr = haoStr.split(" ");
    for(int i =0;i<nums.length;i++){
        nums[i] = Integer.parseInt(haoStrArr[i]);
    }

    System.out.println(change(nums));
    m++;
    }

}



public static int change(int[] nums){
    int count =0;
    for(int i=0;i<nums.length-1;i=i+2){
        if(nums[i]%2==0){
            if(nums[i+1]!=nums[i]+1){
                for(int j =i+2;j<nums.length;j++){
                    if(nums[j]==nums[i]+1){
                        int m = nums[j];

                        nums[j]=nums[i+1];
                        nums[i+1]=nums[i]+1;
                        count++;                            
                    }
                }
            }
        }
        if(nums[i]%2==1){
            if(nums[i+1]!=nums[i]-1){
                for(int j =i+2;j<nums.length;j++){
                    if(nums[j]==nums[i]-1){
                        int m = nums[j];

                        nums[j]=nums[i+1];
                        nums[i+1]=nums[i]-1;
                        count++;                            
                    }
                }
            }
        }
    }        
    return count;

}

}
问题
在自己电脑上运行正常,但系统一直显示运行超时,求大神优化代码

全部评论

相关推荐

01-15 13:52
已编辑
河南大学 Java
六年要多久:标准头像,不吃香菜😂
点赞 评论 收藏
分享
02-22 20:28
重庆大学 Java
程序员牛肉:首先不要焦虑,你肯定是有希望的。 首先我觉得你得好好想一想自己想要什么。找不到开发岗就一定是失败的吗?那开发岗的35岁危机怎么说?因此无论是找工作还是考公我觉得你都需要慎重的想一想。但你一定要避开这样一个误区:“我是因为找不到工作所以不得不选择考公”。 千万不要这么想。你这个学历挺好的了,因此你投后端岗肯定是有面试机会的。有多少人简历写的再牛逼,直接连机筛简历都过不去有啥用?因此你先保持自信一点。 以你现在的水平的话,其实如果想要找到暑期实习就两个月:一个月做项目+深挖,并且不断的背八股。只要自己辛苦一点,五月份之前肯定是可以找到暑期实习的,你有点太过于高看大家之间的技术差距了。不要焦虑不要焦虑。 除此之外说回你这个简历内容的话,基本可以全丢了。如果想做后端,先踏踏实实做两个项目再说+背八股再说。如果想考公,那就直接备战考公。 但是但是就像我前面说的:你考公的理由可以是因为想追求稳定,想追求轻松。但唯独不能是因为觉得自己找不到工作。不能这么小瞧自己和自己的学历。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务