找卧底

找卧底

https://ac.nowcoder.com/acm/contest/6383/A

找卧底

  • 时间复杂度: o(n)
  • 空间复杂度: o(1)
  • 思路: 题目会给出一个乱序的数组,我们可以尝试将其恢复。我们假设牛牛的数在有序数组中排在第一个位置,即a[0](牛牛这么牛,当然要排在最前面),然后其他的数依次递增排列,即n排在a[n]。则当我们拿到打乱顺序后的数组后,我们可以取出a[0],假设此时a[0]=p,则可知这个数原先所在位置为a[p],我们取出a[p],比较a[p]是否等于p,如果不是我们将a[0]和a[p]的值互换重复操作,如果是则说明牛牛所代表的数就是p,卧底找到了。
  • 代码实现
package nowcoder.pinnacle.s1.match3.gold;

/**
 * 找卧底
 * @Author: nayix
 * @Date: 7/21/20 10:58 AM
 */
public class ProblemA {

    /**
     *
     * @param n int整型
     * @param a int整型一维数组
     * @return int整型
     */
    public int search (int n, int[] a) {
        while (a[a[0]] != a[0]) {
            int p = a[0];
            a[0] = a[p];
            a[p] = p;
        }
        return a[0];
    }

    public static void main(String[] args) {
        ProblemA problemA = new ProblemA();
        System.out.println(problemA.search(4, new int[]{1, 2, 1, 4, 3}));
    }
}
全部评论
用异或
1 回复 分享
发布于 2020-07-22 12:22

相关推荐

牛油果甜奶昔:别的先不说,牛客还能内推护士?
点赞 评论 收藏
分享
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务