计算机创新协会冬令营——暴力枚举题目06

2024-01-06 11:36

本文主要是介绍计算机创新协会冬令营——暴力枚举题目06,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我给大家第一阶段的最后一道题就到这里了,下次得过段时间了。所以这道题简单一点。但是足够经典

下述题目描述和示例均来自力扣:两数之和

题目描述

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。


示例

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

Java解法一:我反手就是for暴力

其实暴力的思路很简单,直接第一个for保存当前数值,然后第二个for将除了当前数的其他数全部和这个数试一遍

合适直接返回,不合适接着for直到完全不合适返回空数组。

class Solution {public int[] twoSum(int[] nums, int target) {//我反手看见就是暴力//第一个for获取第一个数for (int i = 0; i < nums.length; i++) {//第二个for获取第二个数//i + 1是因为不能是同一个数相加得targetfor (int j = i + 1; j < nums.length; j++) {//判断是否位目标数if (nums[i] + nums[j] == target){//为目标数return new int[]{i,j};}}}//这里说明没有符合的答案,返回空数组return new int[]{};}
}

可以看出来时间还是花的挺多只超过了23.36%的man,这根本没有打败全世界的人啊nononononononononononononononononononononononononononononononononononono!!

next

Java解法二:采用Map集合作为哈希表

map集合的key-value数据结构就真的就是适合这个题吗?嗯?咋一看这玩意儿和这道题有啥关系。仔细一想呢。

我们需要X + Y = target 对吧,可以知道有X = target - Y 对吧,那么,如果当前取到的X,我们又恰好知道Y的存在,是不是直接就起飞了。好的ヽ( ̄▽ ̄)و,确实起飞了bro

采用map集合,key用于存储这个数,后面的value用于存储他的数组索引,然后采用一层for循环,每次取到这个值X,看一下map里有没有对应Y,使他们相加是target,有返回两个的value,没有加入map集合。这样的话,双层for 的O(n^{2})的时间复杂度就变成了O(n^{})了。

class Solution {public int[] twoSum(int[] nums, int target) {//采用Map集合Map<Integer,Integer> map = new HashMap<>();//进入循环查找for (int i = 0; i < nums.length; i++) {if (map.containsKey(target - nums[i])){//包含取valueInteger value = map.get(target - nums[i]);return new int[]{i,value};}else {//不包含,将其加入mapmap.put(nums[i], i);}}return new int[]{};}
}

不是,我有点无语,这玩意儿怎么还有人能比这还快啊,不理解不理解!!!!!!!!t

但是还是提升了50多倍。


C语言解法

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {int* result = (int*)malloc(2 * sizeof(int));*returnSize = 0;for (int i = 0; i < numsSize; i++) {for (int j = 0; j < numsSize; j++) {if (nums[i] + nums[j] == target && i != j) {result[0] = i;result[1] = j;*returnSize = 2;return result;}}}return result;
}

结语

结语就是我很烦,我又尝试了无数次,表面优化了无数次,还是不行,行吧,接收事实了┭┮﹏┭┮

我的意思是:最后我又多次尝试抓紧你,可是最后还是和你迷失在成长的路里

这篇关于计算机创新协会冬令营——暴力枚举题目06的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/576225

相关文章

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

hdu 2489 (dfs枚举 + prim)

题意: 对于一棵顶点和边都有权值的树,使用下面的等式来计算Ratio 给定一个n 个顶点的完全图及它所有顶点和边的权值,找到一个该图含有m 个顶点的子图,并且让这个子图的Ratio 值在所有m 个顶点的树中最小。 解析: 因为数据量不大,先用dfs枚举搭配出m个子节点,算出点和,然后套个prim算出边和,每次比较大小即可。 dfs没有写好,A的老泪纵横。 错在把index在d

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

计蒜客 Half-consecutive Numbers 暴力打表找规律

The numbers 11, 33, 66, 1010, 1515, 2121, 2828, 3636, 4545 and t_i=\frac{1}{2}i(i+1)t​i​​=​2​​1​​i(i+1), are called half-consecutive. For given NN, find the smallest rr which is no smaller than NN

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn