首页 > 编程语言 >leetcode 算法题目学习笔记 - 序号1

leetcode 算法题目学习笔记 - 序号1

时间:2024-09-22 11:13:44浏览次数:8  
标签:return hashmap nums int 元素 算法 数组 序号 leetcode

1.两数之和

https://leetcode.cn/problems/two-sum/
简要说明:
1.给定一个数组和一个数字
2.要求找到数组中某两个元素,使得他们相加等于所给数字(将所给数字拆为数组中的某两个个元素)
3.以数组形式返回两个下标 否则返回空指针

  • 返回的下标没有顺序要求
  • 假设有唯一解,即只能在数组中找到两个或者零个元素符合要求

初始思路:

  • [暴力算法] 做匹配:循环嵌套,外层循环先对数组进行遍历[i],内层循环也对数组进行遍历[j](但跳过外层循环的元素),遍历时检查元素[i]和元素[j]相加是否为所给数字

    • 时间复杂度: O(n^2), 最好情况一次通过,最坏情况内外循环执行完毕但找不到匹配元素,比较语句执行了n^2次
    • 空间复杂度: O(1), 解法消耗的空间与给定输入没有关联
    点击查看代码
    class Solution {
    public:
        	vector<int> twoSum(vector<int>& nums, int target) {
           	for(int i = 0; i < nums.size(); i++)
               	for(int j = i+1; j < nums.size(); j++)
                   	if(nums[i] + nums[j] == target)
                       	return {i,j};
       	return {};
       	}
    };
    

优化思路

  • [优化算法] 做匹配:在暴力匹配过程中,查找是消耗时间的大户。如果利用哈希表查找会更加快速。

    相关资料

    https://www.cnblogs.com/Brakeintime/p/18425002

    • 时间复杂度: O(n), 最好情况一次通过,最坏情况数组遍历完毕找不到元素,比较语句执行n次
    • 空间复杂度: O(n), 解法消耗的空间与给定数组大小线性相关(因为我们建立了哈希表)
    点击查看代码
    class Solution {
    public:
    	vector<int> twoSum(vector<int>& nums, int target) {
          	std::unordered_map<int, int> hashmap;
           	for(int i = 0; i < nums.size(); i++){
           		auto solve = hashmap.find(target - nums[i]);
                	if (solve != hashmap.end())
                    	return {solve->second, i};
               	hashmap[nums[i]]=i;
           	}
       	return {};
       	}
    };
    

标签:return,hashmap,nums,int,元素,算法,数组,序号,leetcode
From: https://www.cnblogs.com/Brakeintime/p/18425068

相关文章

  • C++ 笔试常用算法模板
    C++笔试常用算法模板一、二叉树遍历DFSBFS二、回溯模板三、动态规划01背包朴素版本滚动数组优化完全背包朴素版本滚动数组优化最长递增子序列朴素版本贪心+二分优化最长公共子序列最长回文子串四、图建图邻接矩阵邻接表图的遍历DFSBFS拓扑排序并查集最小生成树Kr......
  • 双指针算法专题(2)
    找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程(ಥ_ಥ)-CSDN博客所属专栏: 优选算法专题想要了解双指针算法的介绍,可以去看下面的博客:双指针算法的介绍 目录611.有效三角形的个数LCR179.查找总价格为目标值的两个商品15.三数之和18.四数之和......
  • 滑动窗口算法专题(1)
    找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程(ಥ_ಥ)-CSDN博客所属专栏: 优选算法专题目录滑动窗口算法的简介209.长度最小的子数组3.无重复字符的最长子串1004.最大连续1的个数III1658.将×减到0的最小操作数滑动窗口算法的简介滑动窗口......
  • 水母搜索算法(JS)优化BP神经网络原理及Matlab代码
    目录0引言1数学模型2优化方式3Matlab代码3.1伪代码3.2 JS主函数代码3.2JS-BP4视频讲解0引言水母搜索算法(JellyfishSearch,JS)是由Jui-ShengChou在2020年基于水母搜索行为提出的群智能算法。该算法模拟水母搜索行为的包括它们的洋流跟随,它们在水母群中的运......
  • 水母搜索算法(JS)优化支持向量机原理及Matlab代码
    目录0引言1数学模型2优化方式3Matlab代码3.1伪代码3.2 JS主函数代码3.2JS-SVM4视频讲解0引言水母搜索算法(JellyfishSearch,JS)是由Jui-ShengChou在2020年基于水母搜索行为提出的群智能算法。该算法模拟水母搜索行为的包括它们的洋流跟随,它们在水母群中的运......
  • 水母搜索算法(JS)优化长短期记忆神经网络原理及Matlab代码
    目录0引言1数学模型2优化方式3Matlab代码3.1伪代码3.2 JS主函数代码3.2JS-LSTM4视频讲解0引言水母搜索算法(JellyfishSearch,JS)是由Jui-ShengChou在2020年基于水母搜索行为提出的群智能算法。该算法模拟水母搜索行为的包括它们的洋流跟随,它们在水母群中的......
  • 【多变量输入单步预测】基于减法优化器算法(SABO)优化CNN-BiLSTM-Attention的风电功率
         ......
  • 冒泡排序、选择排序、插入排序 - JavaScript 中的数据结构和算法
    排序算法是许多计算任务的支柱,在组织数据以实现高效访问和处理方面发挥着至关重要的作用。无论您是刚刚开始探索算法世界的初学者,还是希望刷新知识的经验丰富的开发人员,了解这些基本排序技术都是至关重要的。在这篇文章中,我们将探讨一些更基本的排序算法-冒泡排序、选择排序和插......
  • 使用 KMeans 聚类算法 对鸢尾花数据集进行无监督学习的简单示例
    代码功能主要功能:加载数据集:代码使用load_iris()函数加载了鸢尾花数据集(Irisdataset)。这个数据集包含150条样本,每条样本有4个特征,对应于3种不同的鸢尾花。KMeans聚类:使用KMeans聚类算法将样本数据分为3个聚类(即3类),尝试发现数据中的自然分组,而不使用标签......
  • Datawhale Leecode基础算法篇 task02:递归算法and分治算法
    官方学习文档:datawhalechina往期task01:枚举算法链接:DatawhaleLeecode基础算法篇task01:枚举算法递归算法递归简介递归(Recursion):指的是一种通过重复将原问题分解为同类的子问题而解决的方法。在绝大数编程语言中,可以通过在函数中再次调用函数自身的方式来实现递归。举......