热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Golang]力扣Leetcode—剑指Offer—数组—53II.0~n1中缺失的数字(求和、二分法)

[Golang]力扣Leetcode—剑指Offer—数组—53-II.0~n-1中缺失的数字(求和、二分法)-题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个

题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

链接: 力扣Leetcode—剑指Offer—数组—53 - II. 0~n-1中缺失的数字.

示例 1:

输入: [0,1,3]
输出: 2

示例 2:

输入: [0,1,2,3,4,5,6,7,9]
输出: 8

思路

  1. 法一:求出 0-n 的和 sum ,再求出给定数组的和,一减就是 0-n 中缺失的数字
  2. 法二:二分法

    • 初始化: 左边界 left = 0,右边界 right = len(nums) - 1;代表闭区间 [i, j] 。
    • 循环二分: 当 i ≤ j 时循环 (即当闭区间 [i, j] 为空时跳出);计算中点 mid = (i + j) / 2
    • 若 nums[mid] = mid ,则 “右子数组的首位元素” 一定在闭区间 [mid + 1, j] 中,因此执行 left = mid + 1;
    • 若 nums[mid] != mid ,则 “左子数组的末位元素” 一定在闭区间 [i, mid - 1] 中,因此执行 right = mid - 1;
    • 返回值: 跳出时,变量 i 和 j 分别指向 “右子数组的首位元素” 和 “左子数组的末位元素” 。因此返回 i 即可。

法一代码:

package main

import "fmt"

func missingNumber(nums []int) int {
    n := len(nums)
    sum := n * (n + 1) / 2
    for i := 0; i 

提交截图

法二代码:

package main

import "fmt"

func missingNumber(nums []int) int {
    left := 0
    right := len(nums) - 1
    for left <= right {
        mid := (left + right) / 2
        if nums[mid] != mid {
            //nums是有序数组,如果mid和数字不相同就在左边查找
            right = mid - 1
        } else {
            //如果mid和数字相同,说明左边是连续的有序数组
            //缺失的数字就在右边查找,left向上取整+1
            left = mid + 1
        }
    }
    return left
}

func main() {
    a := []int{0, 1, 2, 3, 4, 5, 6, 7, 9}
    fmt.Println(missingNumber(a))
}

提交截图


推荐阅读
  • Go冒泡排序练习
    package main要求:随机生成5个元素的数组,并使用冒泡排序对其排序  从小到大思路分析:随机数用mathrand生成为了更好 ... [详细]
  • 认真一点学 Go:18. 并发
    收录于《Go基础系列》,作者:潇洒哥老苗。>>原文链接学到什么并发与并行的区别?什么是Goroutine?什么是通道?Goroutine如何通信?相关函数的使用?sel ... [详细]
  • 按照之前我对map的理解,map中的数据应该是有序二叉树的存储顺序,正常的遍历也应该是有序的遍历和输出,但实际试了一下,却发现并非如此,网上查了下,发现从Go1开始,遍历的起始节点就是随机了,当然随机 ... [详细]
  • golang 解析磁力链为 torrent 相关的信息
    其实通过http请求已经获得了种子的信息了,但是传播存储种子好像是违法的,所以就存储些描述信息吧。之前python跑的太慢了。这个go并发不知道写的有没有问题?!packag ... [详细]
  • 1.File类:文件和目录路径名的抽象表现形式2.创建对象:File(Stringpathname)通过给定的路径创建文件对象File(Stringpa ... [详细]
  • 题目链接:杭电多校7-VirtualJudgevjudge上题目显示的有问题,我下面附上官方题目:样例输入:32201 ... [详细]
  • 我正在使用数组列表通过构建一个交互式菜单供用户选择来存储来自用户输入的值。到目前为止,我的两个选择是为用户提供向列表输入数据和读取列表的全部内容。到目前为止,我创建的代码由两个类组成。 ... [详细]
  • 1.什么是hashcode方法?hashcode方法返回对象的哈希码值在应用程序的执行期间,只要对象的equals方法的比较操作所用到的信息没有改变& ... [详细]
  • 目录在Go语言项目中使用Zap日志库介绍默认的GoLogger日志库实现GoLogger设置Logger使用LoggerLogger的运行GoLogger的优势和劣势优势劣势Ube ... [详细]
  • 1.背景java.util.concurrent.atomic这个包是非常实用,解决了我们以前自己写一个同步方法来实现类似于自增长字段的问题。在Java语言中,增量操作符(++)不是原子的, ... [详细]
  • 自定义RecyclerView添加EmptyView
    你知道RecyclerView里没有Em ... [详细]
  • DFS基本概念步骤优缺点典型例题递推基本概念直接或者间接调用自身的算法称为递归算法一般数据n ... [详细]
  • 找出字符串中重复字符
    2019独角兽企业重金招聘Python工程师标准packagejavaBasic;importjava.util.HashMap;importjava.util.Map; ... [详细]
  • 题意给出一个长度为n的序列,有一些位置可以放任意的数,问最长上升序列的长度。n ... [详细]
  • IDEA实用插件Lombok
    LombokLombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。通常,我们所定义的对象和b ... [详细]
author-avatar
ds87vdsa
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有