交换座位
交换座位
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; }
}
问题
在自己电脑上运行正常,但系统一直显示运行超时,求大神优化代码