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

news/2024/9/22 11:18:37

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 {};}
    };
    

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

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

相关文章

Spring原理基础

Spring 高级 1 容器与Bean 1.1 接口容器 1.1.1 BeanFactory是什么 @SpringBootApplication public class ShowApplication {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(ShowApplication.class, args);/*** 1、…

springboot+vite 商品管理

SpringBoot + Vue3 +MySql5.7 +JDK8 一、 SpringBoot项目搭建 1 SpringBoot概述 1.1 SpringBoot 概念 SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻 辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而…

SaaS业务架构:业务能力分析

大家好,我是汤师爷~ 今天聊聊SaaS业务架构的业务能力分析。 业务能力概述 简单来说,业务能力是企业“做某事的能力”。 业务能力描述了企业当前和未来应对挑战的能力,即企业能做什么或需要做什么。业务能力建模的关键在于定义了企业做什么,而不是如何做(由业务流程描述)。…

Redis常见使用场景

Redis常见使用场景

学习vue——ref和$refs

一、获取dom 二、获取子组件的方法

正方形计数 题解

题意简述 给出一个 \(n \times n\) 的格点平面,有 \(q\) 次询问,求有多少正方形以 \((x, y)\) 为某一顶点,满足这个正方形顶点均在格点上,且边长为有理数。 \(l \leq 10^5\),\(q \leq 5 \times 10^5\)。 题目分析 看到边长为有理数,想到「毕达哥拉斯三元组」("Pyth…