首页 > 其他分享 >3604、猜数字大小

3604、猜数字大小

时间:2023-02-14 14:01:39浏览次数:43  
标签:guess 数字 3604 int num GuessNumberHigherOrLower pick 大小

猜数字游戏的规则如下:


每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。

如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。

你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0):


-1:我选出的数字比你猜的数字小 pick < num

1:我选出的数字比你猜的数字大 pick > num

0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num

返回我选出的数字。



示例 1:


输入:n = 10, pick = 6

输出:6

示例 2:


输入:n = 1, pick = 1

输出:1

示例 3:


输入:n = 2, pick = 1

输出:1

示例 4:


输入:n = 2, pick = 2

输出:2


提示:


1 <= n <= 231 - 1

1 <= pick <= n

通过次数96,779提交次数186,333


来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/guess-number-higher-or-lower

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

package cn.fansunion.leecode.isNumber;

/**

* 374. 猜数字大小 猜数字游戏的规则如下:

*

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

* 你可以通过调用一个预先定义好的接口 : int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0): <br/>

*

* -1:我选出的数字比你猜的数字小 pick < num 1:我选出的数字比你猜的数字大 pick > num 0:我选出的数字和你猜的数字一样。

* 恭喜!你猜对了!pick == num 返回我选出的数字。 <br/>

*

* 来源:力扣(LeetCode) 链接:力扣 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

*

* @author [email protected]

*

* 2022-2-19

*/

public class GuessNumberHigherOrLower {

private int pick;

public GuessNumberHigherOrLower(int pick) {

this.pick = pick;

}

/* 示例 1:



输入:n = 10, pick = 6

输出:6

示例 2:



输入:n = 1, pick = 1

输出:1

示例 3:



输入:n = 2, pick = 1

输出:1

示例 4:



输入:n = 2, pick = 2

输出:2





提示:



1 <= n <= 231 - 1

1 <= pick <= n*/

// 0 1 2 3 4 5 6 7 8 9

// 1 2 3 4

/**

* 数据源,本质是从0到n的一个数组。因为数字是连续的,不存在“二分查找”的一个“细节问题” TODO

*

* @param n

* @return

*/

public int guessNumber(int n) {

if (pick < 0 || pick > n) {

throw new IllegalArgumentException("pick<0 || pick >n");

}

int result = 0;

int min = 0;

int max = n;

int num = (min + max) / 2;

while ((result = guess(num)) != 0 /*&& min < max*/) {

if (result == 1) {

min = num + 1;

} else if (result == -1) {

max = num - 1;

}

// 越界了 num = (min + max) / 2;

num = min + (max - min) / 2;

}

/* if (min >= max) {

return min;

}

*/ return num;

}

/**

* Forward declaration of guess API.

*

* @param num

* your guess

* @return -1 if num is lower than the guess number 1 if num is higher than the guess number otherwise return 0 int

* guess(int num);

*/

public int guess(int num) {

if (pick < num) {

return -1;

} else if (pick > num) {

return 1;

} else {

return 0;

}

}

}
package test.leecode.isNumber;

import org.junit.Assert;

import org.junit.Test;

import cn.fansunion.leecode.isNumber.GuessNumberHigherOrLower;

/**

* @author [email protected]

*

* 2022-2-21

*/

public class GuessNumberHigherOrLowerTest {

@Test

public void test() {

GuessNumberHigherOrLower guess20 = new GuessNumberHigherOrLower(20);

Assert.assertEquals(20,guess20.guessNumber(100));

GuessNumberHigherOrLower guess1 = new GuessNumberHigherOrLower(1);

Assert.assertEquals(1,guess1.guessNumber(100));

GuessNumberHigherOrLower guess258 = new GuessNumberHigherOrLower(258);

Assert.assertEquals(258,guess258.guessNumber(300));

GuessNumberHigherOrLower guess69 = new GuessNumberHigherOrLower(69);

Assert.assertEquals(69,guess69.guessNumber(100));

}



@Test

public void test2() {

GuessNumberHigherOrLower guess125689 = new GuessNumberHigherOrLower(1702766719);

Assert.assertEquals(1702766719,guess125689.guessNumber(2126753390

));

}

}

标签:guess,数字,3604,int,num,GuessNumberHigherOrLower,pick,大小
From: https://blog.51cto.com/fansunion/6056754

相关文章

  • unity 保持物体大小不变
    ///<summary>///在透视投影时,改变相机的fov或物体的位置,让物体保持在屏幕上看起来的大小一样的缩放值///</summary>///<returns></returns>p......
  • 科技在线,前程无忧!流辰信息服务平台与您一起开启数字化办公之旅!
    二十一世纪是经济快速发展的时代,更是科学力量不断加强的时代。在这样的年代里,谁掌握了科技,谁就能在激烈的市场竞争中站稳脚跟,拥有更多的话语权和主动权。随着数字化办公时......
  • 数组中找出只出现一次的两个数字
    问题:剑指Offer56-I.数组中数字出现的次数-力扣(LeetCode)该问题巧妙地利用了异或运算的性质,两个相同的数字相异或为0,遍历完所有的数字后,只剩下两个不相同的数字的异......
  • JavaScript 数字是什么?
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师然冬基于IEEE754标准的双精度64位二进制格式的值(-(253-1)到253-1)。——MDN......
  • 经济下行基建托底,偶数湖仓一体打造坚实新基建数字底座
    据人民网报道,今年五一全国国内旅游收入646.8亿元,同比减少42.9%,消费低迷、出口放缓。2022年国内生产总值(GDP)预期增长如何做到5.5%,政府给出了答案——新基建。基建托底让美国......
  • 偶数科技为辽宁农信数字化进程添加新动能
    斗转星移,数据急剧膨胀2016年辽宁农信上线了基于关系型数据库的数据仓库,实现了各源系统的数据汇集。与此同时上线了大数据平台,实现了审计系统对各源系统贴源层数据的存储、整......
  • 无头模式窗口大小导致的问题
    fromseleniumimportwebdriverfromselenium.webdriver.common.alertimportAlertfromselenium.webdriver.support.waitimportWebDriverWaitfromselenium.webdriv......
  • mysql中判断一个字段是否为纯数字
    今天线上,某些数据的行政区划展示成数字了,应该是这个字段存了中文的名字而不是行政区划代码需求:查出表中某个字段不是纯数字,因为行政区划代码是纯数字,哪怕有一个汉字......
  • 动态NFT赋能三维模型数字资产
    动态NFT技术是近年来最受欢迎的数字资产技术之一,它将动态内容与静态内容相结合,创造出全新的数字资产。动态NFT是一种非常先进的技术,它可以用于创建三维模型,使得数字资产具......
  • 找数组中重复的数字
    问题:数组中重复的数字,且数值小于数字size-1方法一:利用hash,遇到重复的数字时就返回classSolution{public:intfindRepeatNumber(vector<int>&nums){......