问题描述
小C拿到了一个排列,她想知道在这个排列中,元素 x 和 y 是否是相邻的。排列是一个长度为 n的数组,其中每个数字从 1到 n 恰好出现一次。
你的任务是判断在给定的排列中,x和 y 是否是相邻的。
具体问题分析
- 先遍历数组判断x和y在排列中的位置
- 再根据位置的三种情况来分别判断其左、其右、其两侧的数据之一是否符合要求
注意事项
该题目较为简单,思路明显,但是在写代码的过程中要保持清晰的头脑,判断条件的过程比较多,需要注意不要忘记了大括号等符号的规范,以防代码出错。同时,需要注意不要直接判断两侧的数据是否为y,会超出数组的边界,导致程序出错。
具体代码
- 先遍历数组判断x和y再排列中的位置,可以利用for循环来进行遍历,单纯遍历的话有一种简化的方式可以用,能够减少一点代码量,i则为x在数组当中的位置。
for(int a:s)
{
if(x==a[i])
} //a为原来代码当中的s[i]
- 根据x的位置来进行相应位置判断,当i=0时,则只需判断其右侧的数据是否为y;当i=n时,则只需判断其左侧的数据是否为y;若上面两种情况都不符合·,则需要判断其两侧的数据是否为y。符合上面其中一个条件则返回正确,否则返回错误。
if(i==0) //x为最左侧的情况,判断右侧数据
{
if(a[i+1]==y)
{
return true;
}
return false;
}
else if(i==n-1) //x为最右侧的情况,判断左侧数据
{
if(a[i-1]==y)
{
return true;
}
return false;
}
else //上面两种都不是,判断两侧情况
{
if(a[i+1]==y||a[i-1]==y)
{
return true;
}
return false;
}
感悟
题设较为简单,主要就是对于if从句的应用要熟练,还有就是用一些方法来简化代码量,对于问题的考虑要全面,否则直接判断两侧的数据是否有数据等于y则会出现超出数组范围情况(第一个数据无左侧数据,最后一个数据无右侧数据),从而导致程序崩溃。需要有一定的全局视角。对于问题可能出现的几类常见的问题要有解决方法。