请实现一个函数,输入一个整数数组和一个目标值,在数组中找到两个数使得它们的和等于目标值。

news2024/11/19 12:39:47

今日份AI出笔试题:

AI Golang笔试中级题目icon-default.png?t=N7T8https://bs.rongapi.cn/1702565828114780160/23

完整题目:

请实现一个函数,输入一个整数数组和一个目标值,在数组中找到两个数使得它们的和等于目标值。函数应该返回这两个数的索引,其中索引1必须小于索引2。可以假设每个输入只对应一种答案,而且同样的元素不会被重复利用。例如,给定数组 [2, 7, 11, 15] 和目标值 9,因为 nums[0] + nums[1] = 2 + 7 = 9,返回 [0, 1]。

思路:

这个题目拿到手之后,第一直觉是直接双循环,循环拿到第一个数,在剩余的里面去查找第二个数,查到了就提交。

那作为中级题目,我们还是要稍微做一下优化的。

我的优化思路是既然做了循环,有没有可能在过程中做一些缓存数据,加速之后的查找?

开始想要不要直接做个排序,后来觉得排序本身也要计算量,而且这道题不需要完整排序,应该是要比排序快的。

顺着这个思路,我想每次既然比较了一个数值,那我可以在这个过程中把原始数据按大小分成两个部分?

这样外层循环一次,我就能得到粒度更细的一个分组,下次比较,太小的和太大的值都可以直接忽略,再把命中的数组分成两个就好了,比如上面这个例子,如果第二次查找2,那我只需要比较5以下的第一个分组,第二个分组直接跳过

提交结果在最开始的链接里,但是提交之后,AI觉得问题如下:

答案评价:代码逻辑基本正确,但是存在一些冗余的部分。对于分组的处理可以简化一些,并且可以使用map来存储已经遍历过的元素以提高查找效率。

才想起来,直接用map就可以了……就是边循环,便把位置和值信息存到一个map里,之后如果map里有对应值,就拿出来直接返回,如果没有就再循环。

不过我的方案对于需要返回多个可能值的情况还是有帮助的,把修正后的方案贴出来大家指正:


type Group struct {
	Seperator *int
	Values    [][2]int
}

func seperateGroup(seperator int, group *Group) (loc int, smallerGroup *Group, biggerGroup *Group, matched bool) {
	smallerGroup, biggerGroup = &Group{
		Seperator: &seperator,
	}, &Group{
		Seperator: group.Seperator,
	}
	for j := 0; j < len(group.Values); j++ {
		if group.Values[j][0] == seperator {
			return j, nil, nil, true
		} else if group.Values[j][0] < seperator {
			smallerGroup.Values = append(smallerGroup.Values, group.Values[j])
		} else {
			biggerGroup.Values = append(biggerGroup.Values, group.Values[j])
		}
	}
	return 0, smallerGroup, biggerGroup, false
}

func recurse(loc int, arr []int, target int, groups ...*Group) []int {
	if loc == len(arr)-1 {
		return nil
	}
	var cur = arr[loc]
	var remain = target - cur
	var newGroups []*Group
	i := 0
	for ; i < len(groups); i++ {
		if groups[i].Seperator == nil || remain <= *groups[i].Seperator {
			remainLoc, smallerGroup, biggerGroup, matched := seperateGroup(remain, groups[i])
			if matched {
				return []int{loc, groups[i].Values[remainLoc][1]}
			}
			if i == 0 {
				newGroups = []*Group{smallerGroup, biggerGroup}
			} else {
				newGroups = append(groups[:i-1], smallerGroup, biggerGroup)
			}
			break
		}
	}
	if i < len(groups)-1 {
		newGroups = append(newGroups, groups[i+1:]...)
	}
	return recurse(loc+1, arr, target, newGroups...)
}

// 主函数入口
func FindMatchGroup(arr []int, target int) []int {

	if len(arr) < 2 {
		return nil
	}

	var remain = &Group{}
	for i := 1; i < len(arr); i++ {
		remain.Values = append(remain.Values, [2]int{arr[i], i})
	}

	return recurse(0, arr, target, remain)
}

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

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

相关文章

转载—Linux下文件搜索、查找、查看命令

Linux下文件搜索、查找、查看命令 1、最强大的搜索命令&#xff1a;find 查找各种文件的命令  2、在文件资料中查找文件&#xff1a;locate   3、搜索命令所在的目录及别名信息&#xff1a;which  4、搜索命令所在的目录及帮助文档路径&#xff1a;whereis 5、在文件中搜寻…

回收站文件恢复,这3个方法必须掌握!

“我是一名电脑小白&#xff0c;听说电脑中删除的文件会被放入回收站中&#xff0c;那么回收站里的文件应该怎么恢复呢&#xff1f;如果回收站被删除了&#xff0c;文件还有机会找回来吗&#xff1f;” 回收站作为电脑中一个功能强大的工具&#xff0c;对我们找回误删的数据有很…

数据结构-----树和二叉树的定义与性质

目录 前言 思维导图 一.树 树的定义 二.二叉树 1.二叉树的定义 2.二叉树的形态&#xff08;图&#xff09; 3.二叉树的性质 三.满二叉树 1.定义 2.特点和性质 四.完全二叉树 1.定义 2.特点和性质 前言 今天开始我们就学习新的数据结构类型啦&#xff01;没错它就是…

Ribbon负载均衡器

两种&#xff1a; 1.1 集中式负载均衡&#xff0c;服务端负载均衡 硬件 nginx 轮询、负载、哈希、随机、权重 为什么要做负载均衡&#xff1f; 1.2 客户端负载均衡器 用客户端 负载均衡器 很多机制可以自定义 小知识&#xff1a;不想让别人调自己&#xff0c;只想用别人的…

2023-9-22 没有上司的舞会

题目链接&#xff1a;没有上司的舞会 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 6010;int n; int happy[N]; int h[N], e[N], ne[N], idx; bool has_father[N];// 两个状态&#xff0c;选该节点或不选该…

李航老师《统计学习方法》第2章阅读笔记

感知机&#xff08;perceptron&#xff09;时二类分类的线性分类模型&#xff0c;其输入为实例的特征向量&#xff0c;输出为实例的类别&#xff0c;取1和-1二值。感知机对应于输入空间&#xff08;特征空间&#xff09;中将实例划分为正负两类的分离超平面 想象一下在一个平面…

spring:实现初始化动态bean|获取对象型数组配置文件

0. 引言 近期因为要完成实现中间件的工具包组件&#xff0c;其中涉及要读取对象型的数组配置文件&#xff0c;并且还要将其加载为bean&#xff0c;因为使用了spring 4.3.25.RELEASE版本&#xff0c;很多springboot的相关特性无法支持&#xff0c;因此特此记录&#xff0c;以方…

阿里云服务器u1和经济型e实例有什么区别?

阿里云服务器经济型e实例和云服务器u1有什么区别&#xff1f;同CPU内存配置下云服务器u1性能更强&#xff0c;u1实例价格也要更贵一些。经济型e实例属于共享型云服务器&#xff0c;不同实例vCPU会争抢物理CPU资源&#xff0c;并导致高负载时计算性能波动不稳定&#xff0c;而云…

实时更新进度条:JavaScript中的定时器和异步编程技巧

前言 在Web开发中&#xff0c;有许多场景需要实时地更新页面上的进度&#xff0c;例如上传文件、数据处理等。本文将介绍如何利用JavaScript中的定时器和异步编程技巧来实现实时更新进度&#xff0c;并探讨一些其他解决方案。 处理进度实时更新&#xff1a; 利用异步编程实现实…

可转债长期持有策略——收益与风险、利息收入、案例研究

可转债投资策略——长期持有策略 一、收益与风险的权衡 长期持有可转债是一种投资策略&#xff0c;旨在实现稳定的收益&#xff0c;并在投资期限内从可转债中获得利益。在采用这种策略时&#xff0c;投资者需要平衡可转债的收益和风险&#xff0c;以满足其财务目标。以下是关…

尝试访问启动磁盘设置时出错怎么办?

当出现“尝试访问启动磁盘设置时出错”这样的错误提示&#xff0c;而且启动转换控制面板打不开了时&#xff0c;是无法开启触摸板功能的。我们可以使用以下方法来解决问题。 1. 在Windows桌面左下角搜索框输入“计算机管理”后点击“打开”。 2. 点击“本地用户与组”&#xff…

树结构数据在table中回显 treeselect disabled

<el-table-column label"产业认定" align"center" prop"industryIdentification"><template slot-scope"scope"><treeselectv-if"scope.row.industryIdentification"v-model"scope.row.industryIdentif…

Zookeeper系统模型_客户端命令行

创建 创建ZK节点 语法结构&#xff1a; create [-s] [-e] path data acl 参数&#xff1a; -s&#xff1a;顺序节点-e&#xff1a;临时节点 默认情况下&#xff0c;不添加-s或者-e参数的&#xff0c;创建的是持久节点。 示例&#xff1a; [zk: localhost:2181(CONNECTED) …

Spring Cloud Alibaba Gateway全局token过滤、局部过滤访问时间超过50ms日志提示

文章目录 Spring Cloud Alibaba Gateway验证token在前篇的基础上加入依赖在filter包中创建tokenFilter Spring Cloud Alibaba Gateway局部过滤1.继承AbstractGatewayFilterFactory2.仿照AddRequestHeaderGatewayFilterFactory Spring Cloud Alibaba Gateway验证token 基础搭建…

linux上gitlab备份与还原

三 Gitlab备份 1.gitlab安装 1.1 添加镜像地址 添加镜像地址的目的是为了提高国内用户软件下载的速度&#xff0c;编辑(新建)文件gitlab-ce.repo&#xff0c;指令&#xff1a; vi /etc/yum.repos.d/gitlab-ce.repo复制 输入&#xff1a; [gitlab-ce] namegitlab-ce # 清华…

基于SSM+Vue的亿互游在线平台的设计与开发

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

LeetCode01

LeetCode01 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和 为目标值 target 的那两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你…

Unity制作射击游戏案例01

整理逻辑思路&#xff1a; //【业务逻辑】这个脚本用来1.控制物体移动旋转&#xff08;WASD&#xff09;、 2.发射子弹&#xff08;空格键&#xff09; //【程序逻辑2】 首先检测用户没有按下空格键 2.如果按下呢执行发射子弹函数 3.克隆子弹 4.让克隆的子弹往前跑 搭…

Seata 基于改良版雪花算法的分布式 UUID 生成器分析

一般来说&#xff0c;除了“全局唯一”这个基本属性之外&#xff0c;还会要求生成出来的 ID 具有“递增趋势”&#xff0c;这样的好处是能减少 MySQL 数据页分裂的情况&#xff0c;从而减少数据库的 IO 压力&#xff0c;提升服务的性能。 雪花算法&#xff0c;就是一个能生产全…

浅谈霍尔电流传感器在汽车电池管理系统中的应用

摘要&#xff1a; 随着电动汽车和混合动力汽车的需求和产量正在增加&#xff0c;两种类型的车辆都需要高电流容量的电池来运行50kW 或更高功率的电机&#xff0c;并且这些都使用高压系统。汽车电池管理系统中对于电流的测量检测需要隔离测量的方式&#xff0c;而霍尔电流传感器…