LeetCode 1533. Find the Index of the Large Integer(二分查找)「建议收藏」

LeetCode 1533. Find the Index of the Large Integer(二分查找)「建议收藏」文章目录1.题目2.解题1.题目Wehaveanintegerarrayarr,wherealltheintegersinarrareequalexceptforoneintegerwhichislargerthantherestoftheintegers.Youwillnotbegivendirectaccesstothearray,instead,youwillhaveanAPIArrayReaderwhi

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

文章目录

1. 题目

We have an integer array arr, where all the integers in arr are equal except for one integer which is larger than the rest of the integers. You will not be given direct access to the array, instead, you will have an API ArrayReader which have the following functions:

  • int compareSub(int l, int r, int x, int y): where 0 <= l, r, x, y < ArrayReader.length(), l <= r and x <= y. The function compares the sum of sub-array arr[l…r] with the sum of the sub-array arr[x…y] and returns:
    1 if arr[l]+arr[l+1]+...+arr[r] > arr[x]+arr[x+1]+...+arr[y].
    0 if arr[l]+arr[l+1]+...+arr[r] == arr[x]+arr[x+1]+...+arr[y].
    -1 if arr[l]+arr[l+1]+...+arr[r] < arr[x]+arr[x+1]+...+arr[y].
  • int length(): Returns the size of the array.

You are allowed to call compareSub() 20 times at most. You can assume both functions work in O(1) time.

Return the index of the array arr which has the largest integer.

Follow-up:

  • What if there are two numbers in arr that are bigger than all other numbers?
  • What if there is one number that is bigger than other numbers and one number that is smaller than other numbers?
Example 1:
Input: arr = [7,7,7,7,10,7,7,7]
Output: 4
Explanation: The following calls to the API
reader.compareSub(0, 0, 1, 1) 
// returns 0 this is a query comparing the sub-array (0, 0) with the sub array (1, 1), (i.e. compares arr[0] with arr[1]).
Thus we know that arr[0] and arr[1] doesn't contain the largest element.
reader.compareSub(2, 2, 3, 3) 
// returns 0, we can exclude arr[2] and arr[3].
reader.compareSub(4, 4, 5, 5) 
// returns 1, thus for sure arr[4] is the largest element in the array.
Notice that we made only 3 calls, so the answer is valid.

Example 2:
Input: nums = [6,6,12]
Output: 2
 
Constraints:
2 <= arr.length <= 5 * 10^5
1 <= arr[i] <= 100
All elements of arr are equal except for one element which is larger than all other elements.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-the-index-of-the-large-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

/** * // This is the ArrayReader's API interface. * // You should not implement it, or speculate about its implementation * class ArrayReader { * public: * // Compares the sum of arr[l..r] with the sum of arr[x..y] * // return 1 if sum(arr[l..r]) > sum(arr[x..y]) * // return 0 if sum(arr[l..r]) == sum(arr[x..y]) * // return -1 if sum(arr[l..r]) < sum(arr[x..y]) * int compareSub(int l, int r, int x, int y); * * // Returns the length of the array * int length(); * }; */

class Solution { 
   
public:
    int getIndex(ArrayReader &reader) { 
   
        int n = reader.length(), l = 0, r = n-1, midl, midr;
        int flag;
        while(l < r)
        { 
   
        	if((r-l)&1)//差为奇数
        		midl = (l+r)/2,
        		midr = (l+r)/2+1;
        	else//偶数
        		midl = midr = (l+r)/2;
        	flag = reader.compareSub(l, midl, midr,r);
        	if(flag > 0)//左边和大
        		r = midl;
        	else if(flag < 0)//右边和大
        		l = midr;
        	else//相等找到了
        		return midl;
        }
        return l;
    }
};

200 ms 39.7 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160104.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux创建文件

    linux创建文件转载自:https://www.cnblogs.com/lclq/p/5741852.htmlLinux命令(1)-创建文件1.可以使用cat创建一个新的文件  命令:cat&gt;&gt;filename  使用cat创建文件时,以系统默认的文件属性作为新文件的属性,并接受键盘输入作为文件的内容。输入结束时按Ctrl+d退出并保存文件。    另外,使用catfilename命令可以查看文件内…

    2022年6月29日
    21
  • Js实用函数合集

    Js实用函数合集随机数生成器Math.random()转换为整数parseInt()日期时间函数(需要用变量调用):varb=newDate();//获取当前时间b.getTime()//获取时间戳b.getFullYear()//获取年份b.getMonth()+1;//获取月份b.getDate()//获取天b.getHours()//获取小时b.getMinutes()//获取分钟b.getSeconds()//获取秒数b.getDay()//获取星期几b.get

    2022年7月27日
    6
  • C语言 continue「建议收藏」

    C语言 continue「建议收藏」C语言continue在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。案例#include<stdio.h>intmain(){

    2022年8月1日
    5
  • PLSQLDeveloper14连接Oracle11g

    PLSQLDeveloper14连接Oracle11g提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、环境配置1.安装PLSQLDeveloper142.下载并解压Oracle客户端3.配置window操作系统环境变量二、工具配置1.Oracle客户端配置2.PLSQLDeveloper14配置3.重启PLSQLDeveloper14客户端结尾一、环境配置1.安装PLSQLDeveloper14官网自行下载,不详细阐述2.下载并解压Oracle客户端例如版本:instantclient-basic-nt-19.8.0

    2022年5月22日
    41
  • pycharm怎么配置中文_怎么将pycharm变成中文

    pycharm怎么配置中文_怎么将pycharm变成中文需要中文包的可以加入我们的Python交流群:7848.6745找管理员获取~1.Python执行程序形式pythonscript.pypython-c“print()”python-i执行后进入交互式2.虚拟环境配置:介绍python需要创建虚拟环境的原因3.4之前版本用virtualenv工具,3.4及以后版本可以用venv模块virtualenvmyenv…

    2022年8月25日
    9
  • java中sql如何嵌套查找_SQL 查询嵌套使用[通俗易懂]

    java中sql如何嵌套查找_SQL 查询嵌套使用[通俗易懂]示例表如下:createtableit_student(idintprimarykeyauto_increment,–主键idnamevarchar(20),–姓名genderenum(‘male’,’female’),–性别class_idtinyintunsigned,–班级号ageintunsigned,–年龄homevar…

    2022年8月10日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号