【LeetCode】 374. 猜数字大小 骚气的猴子算法 打死都找不着系列 JAVA

淩亂°似流年 2021-06-10 20:38 378阅读 0赞

题目

题目传送门:传送门(点击此处)
在这里插入图片描述

题解

猴子排序

猴子排序是一种什么样子的排序呢?

猴子排序引用了无限猴子定理:即一只猴子随机不停的敲击键盘,如果时间足够长,那么它总有可能会打出特定的文本,比如莎士比亚全集?,算法通过不停的随机排列数组,直到数组有序

这个真实的含义就是把一个无序的数组进行乱排序,然后看其是否会有序,这是个概率性事件,有可能一次之后就有序了,也有可能很多次后依然无序。

实现方法如下:

  1. 定义数组
  2. 数组随机
  3. 检验数组是否有序,无序继续,有序了就停止

猴子算法

当然这个算法也可能不存在哈,我给它起的名字,就叫猴子算法,也是随机寻找的意思

所以我想的就是,随机数找这个数字,这样就完事儿了

虽然超出时间限制,但是也很好玩

骚气的猴子算法代码

  1. /* The guess API is defined in the parent class GuessGame. @param num, your guess @return -1 if my number is lower, 1 if my number is higher, otherwise return 0 int guess(int num); */
  2. public class Solution extends GuessGame {
  3. public int guessNumber(int n) {
  4. int num = 0;
  5. Random random = new Random();
  6. while(guess(num) != 0){
  7. num = random.nextInt(n) + 1;
  8. }
  9. return num;
  10. }
  11. }

正儿八经的二分查找代码

  1. /* The guess API is defined in the parent class GuessGame. @param num, your guess @return -1 if my number is lower, 1 if my number is higher, otherwise return 0 int guess(int num); */
  2. public class Solution extends GuessGame {
  3. public int guessNumber(int n) {
  4. int res = 0;
  5. int left = 1;
  6. int right = n;
  7. while(left <= right){
  8. res = left + (right - left) / 2;
  9. int flag = guess(res);
  10. if(flag == 0) return res;
  11. if(flag == -1) right = res - 1;
  12. if(flag == 1) left = res + 1;
  13. }
  14. return res;
  15. }
  16. }

发表评论

表情:
评论列表 (有 0 条评论,378人围观)

还没有评论,来说两句吧...

相关阅读

    相关 leetcode374. 数字大小

    我们正在玩一个猜数字游戏。 游戏规则如下: 我从 1 到 n 选择一个数字。 你需要猜我选择了哪个数字。 每次你猜错了,我会告诉你这个数字是大了还是小了。 你调用一

    相关 374. 数字大小

    > 猜数字游戏的规则如下: > > 每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。 > 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字

    相关 374. 数字大小

    猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。