【练习】Day05

news2024/11/19 22:44:09

努力经营当下,直至未来明朗!

文章目录

  • 一、选择
  • 二、编程
    • 1. 跳跃游戏[贪心算法]
    • 2. 寻找重复数[注意思路!]
  • 答案
    • 1. 选择
    • 2. 编程


普通小孩也要热爱生活!

一、选择

  1. HASH 函数冲突处理方式不包括以下哪一项:()

A. 开放定址法
B. 链地址法
C. 插入排序法
D. 公共溢出区法

  1. HashMap的数据结构是怎样的?()

A. 数组
B. 链表
C. 数组+链表
D. 二叉树

  1. 以下程序的运行结果是( )
TreeSet<Integer> set = new TreeSet<Integer>();
TreeSet<Integer> subSet = new TreeSet<Integer>();
for(int i=606;i<613;i++){
	if(i%2==0){
		set.add(i);
	}
}
subSet = (TreeSet)set.subSet(608,true,611,true);
set.add(609);
System.out.println(set+" "+subSet);

A. 编译失败
B. 发生运行时异常
C. [606, 608, 609,610, 612] [608, 609,610]
D. [606, 608, 609,610, 612] [608, 610]

  1. 散列函数有共同的性质,则函数值应当以( )概率取其值域的每一个值。( )

A. 最大
B. 最小
C. 平均
D. 同等


二、编程

1. 跳跃游戏[贪心算法]

LeetCode45.跳跃游戏II
给你一个非负整数数组 nums ,你最初位于数组的第一个位置(也就是0下标)。数组中的每个元素代表你在该位置可以跳跃的最大长度
你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。


2. 寻找重复数[注意思路!]

LeetCode287.寻找重复数
给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的
整数。
假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。你设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。


答案

1. 选择

  1. ① 插入排序是一种排序算法。
    ② Hash函数冲突的处理方法有:开放地址法,链地址法,再哈希法, 建立公共溢出区。
    ③ hash冲突的避免设计哈希函数(直接定制法、除留余数法、平方取中法、折叠法、随机数法、数字分析法)、调节负载因子
    解决 hash冲突:闭散列(开放定址法:线性探测、二次探测)、开散列/哈希通过(链地址法、开链法)、公共溢出区法。
    一定要区分“避免”和“解决”!!
    参考:Hash函数

故:选C

  1. HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对
    ② 数组的每一个元素上可以挂key值相同的链表元素链表主要为了解决哈希冲突而存在的

故:选C

  1. 【最难理解的就是:subSet = (TreeSet)set.subSet(608,true,611,true);
    set中存放的是一组不重复的数据集合,根据循环可以知道606~613这几个数据中,是2的倍数为606,608,610,612
    ② 最后set中add加入了609,所以set:[606, 608, 609,610, 612]
    java.util.TreeSet.subSet(E fromElement,boolean fromInclusive,E toElement,boolean toInclusive) 方法用于返回位于给定范围之间的一组元素

参数:
① fromElement:这是返回集的最小边界值
② fromInclusive:如果将最小边界值包含在返回的视图中,则为true。(决定是否包含边界值)
③ toElement:这是返回集的最大边界值。
④ toInclusive:如果要在返回的视图中包含最大边界值,则为true。
所以,set.subSet(608,true,611,true)返回的数为:[608, 609,610]

故:选C

  1. ① Hash函数的算法运算所取得的值应当尽可能均匀的分布,否则就会出现哈希冲突。
    ② 哈希冲突可以减少,但是是无法避免的。

故:选D:同等概率


2. 编程

  1. 跳跃游戏
    1)思路:

① 这道题是典型的贪心算法通过局部最优解得到全局最优解
② 我们的目标是到达数组的最后一个位置,因此我们可以考虑最后一步跳跃前所在的位置,该位置通过跳跃能够到达最后一个位置。
③ 如果有多个位置通过跳跃都能够到达最后一个位置,那么我们应该如何进行选择呢?直观上来看,我们可以 「贪心」地选择距离最后一个位置最远的那个位置,也就是对应下标最小的那个位置。因此,我们可以从左到右遍历数组,选择第一个满足要求的位置。
④ 找到最后一步跳跃前所在的位置之后,我们继续贪心地寻找倒数第二步跳跃前所在的位置,以此类推,直到找到数组的开始位置。
⑤ 所以记录一个要到达的索引位置 position ,最开始的索引值是 数组长度 - 1 ,每次贪心查找(从左到右遍历数组),如果找到前一个最远跳跃的点,就将该位置置为遍历到的索引。
⑥ 【具体:下标索引+值 >=索引位置,然后更新position位置,i重新开始】

2)代码:

class Solution {
    // 最小跳跃次数
    public int jump(int[] nums) {
        // 跳的步数
        int steps = 0;
        // 目标索引位置,只要新找到就会进行更新,知道来到起始位置0
        int position = nums.length-1;
        while(position > 0) {
            // 从前往后开始遍历,因为要确保索引最小,这样就可以使得跳跃次数最小
            // 最远只需要到position位置就行,后面的说明已经有保障
            for (int i = 0; i < position; i++) {
                if(i+nums[i] >= position) {
                    // 此时就说明一步可以到达
                    steps++;
                    // 然后进行更新position位置
                    position = i;
                    // i需要从0下标重新开始
                    break;
                }
            }
        }
        return steps;
    }
}

  1. 寻找重复数
    1)思路:

① 将这个题目给的特殊的数组当作一个链表来看,数组的下标就是指向元素的指针,把数组的元素也看作针。如 0是指针,指向 nums[0] ,而 nums[0] 也是指针,指向 nums[nums[0]]。
8
② 这样就转变为环形链表的问题:而要找到环形链表的入口,采用快慢双指针即可实现:
A. 定义快慢两个指针 slow 、 fast ,开始都是 0 表示在链表头部。
B. 一直循环,让慢指针走一步,即 slow=nums[slow] ;让快指针走两步,即 fast=nums[fast] 执行两次,也即
fast=nums[nums[fast]] 。[快指针两步,慢指针一步]
C. 再使用一个指针 finder ,最开始为 0 表示在链表头部;随后,它和 slow 每次向后移动一个位置。最终,它
们会在入环点相遇。
③ 格外注意下一个元素的位置,相当于是链表!!

2)代码:

import java.util.HashMap;

class Solution {
    public int findDuplicate(int[] nums) {
        // 使用快慢指针,直到相等时就退出循环
        int slow = 0;
        int fast = 0;
        while(true) {
            slow = nums[slow]; // 一步
            fast = nums[nums[fast]]; // 两步
            if(fast == slow) {
                break; // 退出循环
            }
        }
        // 定义第三个指针finder,用来找环形链表的入口!!
        int finder = 0;
        // 一直循环,直到与slow相遇(同时走)
        while(true) {
            finder = nums[finder];
            slow = nums[slow];
            if(finder == slow) {
                break;
            }
        }
        // 此时就是环形的入口
        return finder;
    }
}

111

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

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

相关文章

YOLOv5源码详解——项目目录

YOLOv5 目录 .github .github相关&#xff0c;不重要 datasets 存放数据集,刚下载下来的源码是不包含这个文件夹的 classify 图像分类模块&#xff0c;包含以下4个文件 predict.py —— 图像分类预测脚本train.py ——图像分类训练脚本val.py —— 图像分类验证脚本tutorial.…

Java开发学习(四十一)----MyBatisPlus标准数据层(增删查改分页)开发

一、标准CRUD使用 对于标准的CRUD功能都有哪些以及MyBatisPlus都提供了哪些方法可以使用呢? 我们先来看张图: 1.1 环境准备 这里用的环境就是Java开发学习(四十)----MyBatisPlus入门案例与简介中使用的环境 二、新增 在进行新增之前&#xff0c;我们可以分析下新增的方法…

马蹄集 公式计算

公式计算 难度&#xff1a;青铜 01 时间限制&#xff1a;1秒巴占用内存&#xff1a;64M 计算公式 (1/2)*(a*xc(ac)/(4*a)》 格式 输入格式&#xff1a;输入为整型x,a,空格分隔 #include <bits/stdc.h> using namespace std; int main() {int x, a;cin >> x >&g…

1、JDK17安装

目录 一、简介 二、安装步骤 三、在Windows 10系统中配置环境变量 四、运行jdk 一、简介 JDK全称Java SE Development kit(JDK)&#xff0c;即java标准版开发包&#xff0c;是Oracle提供的一套用于开发java应用程序的开发包&#xff0c;它提供编译&#xff0c;运行java程…

二叉树【数据结构】【超详细,一学就会!!!】

目录 &#x1f4d6;1.什么是二叉树&#xff1f; &#x1f334;2.满二叉树和完全二叉树 ⛳2.二叉树的性质 &#x1f525;3.二叉树的创建与遍历 3.1 创建二叉树 3.2 前中后序遍历——递归和非递归 &#x1f3f9;4.二叉树的实现 1️⃣获取树中节点的个数 2️⃣获取叶子节点…

MATLAB-三维插值运算

MATLAB中是支持三维及三维以上的高维插值的。三维插值的基本原理与一维插值和二维插值是一样的&#xff0c;但三维插值是对三维函数进行的插值。在MATLAB中&#xff0c;使用interp3函数实现插值&#xff0c;其调用格式如下。vi interp3(x,y,z,v,xi,yi,zi) %返回值 vi是三维插值…

2022ICPC杭州站

A. Modulo Ruins the Legend 题目链接&#xff1a;Problem - A - Codeforces 样例1输入&#xff1a; 6 24 1 1 4 5 1 4样例1输出&#xff1a; 1 0 5样例2输入&#xff1a; 7 29 1 9 1 9 8 1 0样例2输出&#xff1a; 0 0 0题意&#xff1a;给你一个长度为n的数组a[]&#x…

【NI Multisim 14.0原理图的设计——原理图分类】

目录 序言 一、原理图的设计 &#x1f34a;知识点&#xff1a; 二、原理图分类 &#x1f349;1.平坦式电路 &#x1f349; 2.层次式电路图 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地使用虚拟元器件和仪器、仪表进行电路设计和…

【用JS自制表格软件玩数据】10. 为表格脚本设计一个语法解析器

设计脚本语言的语法解析器概述脚本源码语法预览运行效果如下图设计计算符号的优先级定义一些关键词生成一份关键词的map方便引用枚举关键词的类型错误异常的捕获字符匹配代码的字符转化成迭代器关键词标记器词法分析器设计一个队列处理器源代码字符串迭代器代码的块级运行环境脚…

【HTML基础篇003】前端基础之CSS选择器大全

✨一、CSS的基本介绍 CSS&#xff08;Cascading Style Sheet&#xff0c;层叠样式表)定义如何显示HTML元素。 当浏览器读到一个样式表&#xff0c;它就会按照这个样式表来对文档进行格式化&#xff08;渲染&#xff09;。 ✨二、CSS的几种引入方式 &#x1f338;2.1、方法一&am…

连接查询之内连接(等值连接、非等值连接和自连接)

1、等值连接&#xff1a;表连接条件是等值关系&#xff0c;我们称为等值连接。 需求&#xff1a;查询每个员工所在部门名称&#xff0c;显示员工名和部门名&#xff1a; 查看员工表的ename和deptno字段信息&#xff1a; 查看部门表中的deptno和dname字段信息 SQL92语法&#x…

2023年最值得关注的机器人趋势TOP10

新兴的机器人技术趋势和预测满足了对工业自动化、数字化和可持续性的需求。仓库中的材料处理由自动移动机器人&#xff08;AMR&#xff09;和自动引导车辆&#xff08;AGV&#xff09;实现自动化。相关机构对8949家全球初创企业和2023年机器人趋势规模的样本进行了研究&#xf…

Linux的安装(云服务器专讲)

一、Linux环境的安装有一下几种方式&#xff1a;双系统或则将自己的笔记本搞成Linux系统——严重不推荐&#xff0c;这样安装成本高、并且容易把自己电脑弄坏。虚拟机推荐wmware player这是免费的&#xff0c;并且推荐是打在了centos7.x版本的&#xff0c;这个的好处就是不需要…

微信接入 ChatGPT(学习笔记,不作教程)

微信接入 ChatGPT前置条件接入前提去Linux虚拟机&#xff08;必须有go环境&#xff09;安装前先配置下ssh密钥生成新的ssh密钥检查将 SSH 密钥添加到 ssh-agent将 SSH 密钥添加到您在 GitHub 上的帐户上去github上将密钥复制在里面然后点击添加ssh密钥安转部署最后直接go run m…

【JavaSE】Java序列化详解

【JavaSE】Java序列化详解 文章目录【JavaSE】Java序列化详解一&#xff1a;什么是序列化和反序列化?二&#xff1a;序列化协议对应于 TCP/IP 4 层模型的哪一层&#xff1f;三&#xff1a;常见序列化协议有哪些&#xff1f;四&#xff1a;JDK 自带的序列化方式1&#xff1a;序…

广告业务系统 之 数据桥梁 —— “日志中心-曝光数据流转结算”

文章目录广告业务系统 之 数据桥梁 —— “日志中心-曝光数据流转结算”曝光数据流转结算管道式架构助力高可用管道式架构模式图流式链路中特殊的缓存设计一、二级缓存Nosql 数据型缓存组件s2s 监测上报广告业务系统 之 数据桥梁 —— “日志中心-曝光数据流转结算” 曝光数据…

SpringCloud微服务项目实战 - 5.自媒体文章审核

愤怒归根结底是为了达成目的的一种工具和手段&#xff0c;大声呵斥乃至拍桌子&#xff0c;目的都是通过震慑对方&#xff0c;进而使其听自己的话&#xff0c;因为他们也找不到更好的办法。 系列文章目录 项目搭建App登录及网关App文章自媒体平台&#xff08;博主后台&#xff…

68.多尺度目标锚框的代码实现

在之前&#xff0c;我们以输入图像的每个像素为中心&#xff0c;生成了多个锚框。 基本而言&#xff0c;这些锚框代表了图像不同区域的样本。 然而&#xff0c;如果为每个像素都生成的锚框&#xff0c;我们最终可能会得到太多需要计算的锚框。 想象一个 561728 的输入图像&…

UG/NX 二次开发(C#)自动出2D零件图(标准件配置Bata版)

一、前言 昨天分享了自动出2D零件图的思路&#xff08;UG/NX 二次开发(C#)自动出2D零件图思路&#xff09;&#xff0c;今天整理了Q群里各位大佬的意见&#xff0c;结合当前实际项目情况&#xff0c;做了一个可配置的半自动出图版本&#xff0c;暂且称之为标准件配置Bata版。 虽…

steam/csgo搬砖项目详解

steam搬砖项目简单来说&#xff0c;就是在steam平台购买游戏装备到网易BUFF平台出售&#xff0c;赚取汇率差和装备差价。 我今天也就给大家讲解一下steam项目的原理&#xff0c;还有存在什么样的风险。 做steam搬砖需要什么准备&#xff1a; 1.手机 2.电脑 3.美服steam账号 4.…