剑指Offer专项突击版题解八

news2024/11/15 11:10:36

71.按权重生成随机数

思考:说到平均的生成随机数,想到了水塘抽样法和彩票调度法。

水塘抽样算法适合于样本不确定,乃至于是变化的,每个样本的概率是一样的。

// 样本nums[],每个元素的被抽到的概率是一样的
index := 0 
for i := 1; i <= len(nums); i++{
    if rand.Intn(i) == 0{
        index = nums[i-1]
    }
}
return index

彩票调度算法是一种类似于将概率体现在数轴上面,适用范围是样本已知。

nums [] // 表示每个样本的概率
sum := 0 // 表示总的概率数
for i := 0 ; i < len(nums); i++{
    sum += nums[i]
}
r := rand.Intn(sum) // 平均的随机从0-sum-1取出一个数
cv := 0 // 表示当前所处的位置
for i := 0; i < len(nums); i++{
    cv += nums[i]
    if cv > r{ // 获取被抽中的下标
       return i
    }
}

72.求平方根

思想:二分查找、牛顿迭代法。

func mySqrt(x int) int {
    if x == 0 {
        return 0
    }
    C, x0 := float64(x), float64(x)
    for {
        if math.Abs(x0 - xi) < 1e-7 {
            break
        }
        x0 = xi
    }
    return int(x0)
}

73.狒狒吃香蕉

思想:二分查找思想,因为目标答案明确。

74.合并区间

思想:按照区间排序之后再进行合并。

75.数组相对排序

思想:借助map存储排序的权制,在通过内置函数sort.Sllice进行排序。

76.数组中的第 k 大的数字

思想:快排序定位

77.链表排序

思路:暴力思路,将节点放到数组内然后进行排序。

进阶:归并排序的思想。

func sortList(head *ListNode) *ListNode {
    var mergeSort func(left, right *ListNode) *ListNode
    merge := func(left, right *ListNode) *ListNode {
        res := &ListNode{}
        tail := res
        for left != nil && right != nil{
            if left.Val > right.Val {
                tep := right
                right = right.Next
                tep.Next = nil
                tail.Next = tep
                tail = tep
            }else {
                tep := left
                left = left.Next
                tep.Next = nil
                tail.Next = tep
                tail = tep
            }
        }
        if left != nil{
            tail.Next = left
        }
        if right != nil{
            tail.Next = right
        }
        return res.Next
    }
    // 左闭右开
    mergeSort = func(left, right *ListNode) *ListNode {
        if left == nil {
            return nil
        }
        if left.Next == right {
            left.Next = nil
            return left
        }
        fast := left
        low := left
        for fast != right {
            low = low.Next
            fast = fast.Next
            if fast != right {
                fast = fast.Next
            }
        }
        mid := low
        return merge(mergeSort(left, mid), mergeSort(mid, right))
    }
    return mergeSort(head, nil)
}

 

78.合并排序链表

思路:归并思路好,如果采用普通的解法去做,进行循环遍历也能得出结果,但是时间复杂度比较高。

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func mergeKLists(lists []*ListNode) *ListNode {
    merge := func (a , b *ListNode)*ListNode{
        res := &ListNode{}
        tail := res
        for a != nil && b != nil{
            if a.Val > b.Val{
                tep := b
                b = b.Next
                tail.Next = tep
                tail = tep
            }else {
                tep := a
                a = a.Next
                tail.Next = tep
                tail = tep
            }
        }
        if a != nil{
            tail.Next = a
        }
        if b != nil{
            tail.Next = b
        }
        return res.Next
    }
    var MegerSort func(left , right int)*ListNode
    MegerSort = func (left , right int)*ListNode{
        if left == right{
            return lists[left]
        }
        mid := left + (right - left) / 2
        return merge(MegerSort(left , mid) , MegerSort(mid + 1 , right))
    }
    if len(lists) == 0{
        return nil
    }
    return MegerSort(0 , len(lists)-1)
}

79.所有子集

思路:dfs

80.含有 k 个元素的组合

思路:dfs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/355787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes03:kubernetes 功能和架构

2.1 概述 Kubernetes 是一个轻便的和可扩展的开源平台&#xff0c;用于管理容器化应用和服务。通过 Kubernetes 能够进行应用的自动化部署和扩缩容。在 Kubernetes 中&#xff0c;会将组成应用的容 器组合成一个逻辑单元以更易管理和发现。Kubernetes 积累了作为 Google 生产环…

时序预测 | Python实现TCN时间卷积神经网络时间序列预测

时序预测 | Python实现TCN时间卷积神经网络时间序列预测 目录 时序预测 | Python实现TCN时间卷积神经网络时间序列预测预测效果基本介绍环境准备模型描述程序设计学习小结参考资料预测效果 基本介绍 递归神经网络 (RNN),尤其是 LSTM,非常适合时间序列处理。 作为研究相关技术…

生成模型技术发展过程

生成模型生成模型和判别模型的差异生成模型的目标是在给定了数据集D&#xff0c;并且假设这个数据集的底层分布(underlying distribution)是Pdata&#xff0c;我们希望够近似出这个数据分布。如果我们能够学习到一个好的生成模型&#xff0c;我们就能用这个生成模型为下游任务做…

【项目立项管理】

项目立项管理 很杂&#xff0c;可以根据左边的列表查看自己不会的 。。。 立项管理主要是解决项目的组织战略符合性问题 开发所需的成本和资源属于经济可行性 承建方组织资源和项目的匹配程度 内部立项目的&#xff1a; 为项目进行资源分配&#xff0c;确定项目绩效目标&am…

字节二面:10Wqps超高流量系统,如何设计?

超高流量系统设计思路 前言 在40岁老架构师 尼恩的**读者交流群(50)**中&#xff0c;大流量、高并发的面试题是一个非常、非常高频的交流话题。最近&#xff0c;有小伙伴面试字节时&#xff0c;遇到一个面试题&#xff1a; 10Wqps超高流量系统&#xff0c;该如何设计&#xf…

湿度敏感性等级(MSL)

趁着周末得空&#xff0c;也有意愿&#xff0c;赶紧把之前一直想写的这个主题完成了。 湿度敏感性等级&#xff0c;相信大部分人还是比较陌生的。 湿度敏感性等级&#xff1a;MSL&#xff0c;Moisture sensitivity level 之所以有这个等级&#xff0c;大概是因为以下原因&a…

软考高级-信息系统管理师之进度管理(最新版)

项目进度管理 项目进度管理1概述2项目进度管理过程2.1规划进度管理1、规划项目进度管理目的2、规划进度管理:输入3、规划进度管理:输出2.2定义活动1、为了更好地规划项目2、定义活动过程就是3、定义活动:输入4、定义活动:输出2.3排列活动顺序1、排列活动顺序2、排列活动顺序:输…

19 顺序存储二叉树

文章目录1 顺序存储二叉树的概念1 顺序存储二叉树的概念 从数据存储来看&#xff0c;数组存储方式和树的存储方式可以相互转换&#xff0c;即数组可以转换成树&#xff0c;树也可以转换成数组&#xff0c;看右面的示意图。 要求: 1) 右图的二叉树的结点&#xff0c;要求以数…

Git常用命令以及如何在IDEA中使用Git

前言Git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件&#xff08;Java类、xml文件、html页面等&#xff09;。Git在管理文件过程中会记录日志&#xff0c;方便回退到历史版本&#xff1b;Git存在分支的概念&#xff0c;一个项目可以有多个分支&…

linux014之进程和服务管理

linux中的进程管理&#xff1a; 查看进程命令&#xff1a; ps &#xff1a;查看应用级别的进程 ps -e&#xff1a; 查看系统应用级的进程 ps -ef &#xff1a;显示进程的全部信息(这个命令经常用) ps -ef|grep 关键字&#xff1a; 查看带有关键字的进程 关闭进程命令&#xff1…

win11+pytorch1.7.0+python3.8(也可以是python3.7)+cuda11.0

win11pytorch1.7.0python3.8cuda11.0写在最前面一. 软件配备二. 创建虚拟环境2.1 创建环境名称&#xff0c;并选择‘y’2.2.进入虚拟环境三. 安装pytorch四. 安装虚拟环境下的notebook4.1 安装ipykernel&#xff0c;并选择‘y’&#xff0c;直至安装完成4.2 将环境名注册到note…

安全—09day

XSS1. XSS的原理2. Xss漏洞分类2.1 反射性xss2.2 存储型XSS2.3 基于DOM的 XSS2.4 XSS漏洞的危害3. XSS的各种bypass技巧4. 从 XSS Payload 学习浏览器解码5. 浏览器解析机制5.1 HTML中有五类元素&#xff1a;5.2 五类元素的区别1. XSS的原理 恶意攻击者往Web页面里插入恶意Scr…

AcWing:4861. 构造数列、4862. 浇花(C++)

目录 4861. 构造数列 问题描述&#xff1a; 实现代码&#xff1a; 4862. 浇花 问题描述&#xff1a; 实现代码&#xff1a; 4861. 构造数列 问题描述&#xff1a; 我们规定如果一个正整数满足除最高位外其它所有数位均为 00&#xff0c;则称该正整数为圆数。 例如&…

Redis基础操作以及数据类型

目录 Redis基础操作 java中的i是不是原子操作&#xff1f;不是 数据类型 1. list 2. set 3. Hash哈希 4. Zset有序集合 Redis基础操作 set [key] [value] 设置值 &#xff08;设置相同的会将原先的覆盖&#xff09; get [key] 获取值 不能覆盖和替换 ttl [key] 以秒为单…

【uniapp】开发一款手机端go语言教程软件

文章目录介绍数据源体验优化总结介绍 闲来无事&#xff0c;折腾一款 go语言教程软件&#xff0c;软件使用uniapp-cli&#xff0c;vue2编写。 界面很简单&#xff0c;侧边栏为目录&#xff0c;主页是由markdown渲染的正文。 单击悬浮按钮打开目录&#xff0c;双击回到正文顶部。…

MySQL知识汇总:MySQL函数CASE WHEN用法详解

Case When的两种简单用法 用法一&#xff1a; CASE seasonWHEN Spring THEN 春天 WHEN Summer THEN 夏天 WHEN autumn THEN 秋天 else 冬天 end 用法二&#xff1a; CASE WHEN season Spring THEN 春天WHEN season Summer THEN 夏天WHEN season autumn THEN 秋天 els…

chatGPT与人形机器人,高泽龙接受中国经营报采访谈二者发展

1.相较于Chatgpt&#xff0c;人形机器人的市场前景有多大&#xff1f;答&#xff1a;人形机器人的市场前景可以用“无限大”来形容&#xff0c;这看起来很夸张而且并不合理&#xff0c;其实是客观而且中肯的。因为这个问题就仿佛是五十年前&#xff0c;人们问“未来的电脑市场有…

2023美国大学生数学建模竞赛E题光污染完整数据集和求解代码分享

目录 数据集收集 GeoNames 地理数据集 全球各国的经纬度数据集 协调一致的全球夜间灯光&#xff08;1992 - 2018&#xff09;数据集 NASA 的 EaN Blue Marble 2016 数据集 全球夜间数据集 读取数据集 绘制热图 光污染分析 ​数据集和代码地址 2023美国大学生数学建模…

ChIP-seq 分析:数据质控实操(5)

1. 数据 今天将继续回顾我们在上一次中研究的 Myc ChIPseq。这包括用于 MEL 和 Ch12 细胞系的 Myc ChIPseq 及其输入对照。 可在此处[1]找到 MEL 细胞系中 Myc ChIPseq 的信息和文件可在此处[2]找到 Ch12 细胞系中 Myc ChIPseq 的信息和文件可以在此处[3]找到 MEL 细胞系的输入…

Linux--Upd--套接字编程(单线程和多线程版本)--0215 16

观前提示&#xff1a; 本文涉及了以前博文实现的相关内容&#xff0c;在此贴出 线程的封装 Thread.hpp 及 日志 Liunx--线程池的实现--0208 09_Gosolo&#xff01;的博客-CSDN博客 1. 网络编程相关接口 1.1 创建套接字 #include <sys/types.h> #include <sys/so…