每日算法之数组(一)

Python|每日一练|数组|数学|图算法|字符串|动态规划|单选记录:加一|迷宫问题|扰乱字符串 Python|每日一练|数组|数学|数组|图算法|字符串|动态规划|单选记录:加一|迷宫问题|扰乱字符串 阅读详情

背景

经过面试才知道算法的重要性,无论是社招还是校招,所有大厂都很注重对于算法能力的考察,所以算法简直就是居家旅行升职加薪的必备技能。而且抛去这些功利的想法,算法确实可以锻炼我们的逻辑思维和抽象的能力,这也是程序猿的基本素养。所以我也想专门开一个专栏记录自己的刷题之路,尽可能深入的剖析问题,理解不同的解题思路,而且我也一直在追求技术的全面性而不是囿于移动开发一个领域,所以也会尽可能使用不同的语言,在实践中去领悟不同语言的特性。最后还有一点就是希望找一件事情一直坚持下去,经过多年我发现持之以恒才是这个世界上最难能可贵的品质,一个人的时间是有限的,一个好的习惯可以让我们戒掉一个坏的习惯。

这次刷题会对题目进行分类总结,即会根据数据结构数组、链表和树等归类,也会根据算法如分治法和动态规划等进行总结,题目主要来源于leetcode。

题目

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

示例

输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
输入: nums = [3,2,4], target = 6
输出: [1,2]
输入: nums = [3,3], target = 6
输出: [0,1]

解题思路

暴力枚举

这是一道数组简单题,没有太多复杂的算法,主要考察对于基本的数组操作,最先想到的可以通过两次枚举来寻找合适的对象,而且第二次枚举可以从第一次枚举开始的下一项开始。

JAVA
class Solution {
    public int[] twoSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] + nums[j] == target) {
                    return new int[]{i, j};
            }
        }
    }
    return new int[0];
    }
}
Python3
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(0, len(nums)):
            for j in range(0, len(nums)):
                if nums[i] + nums[j] == target:
                    return [i, j]
        return []       
C++
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int size = nums.size();
        for (int i = 0; i < size; ++i) {
            for (int j = i + 1; j < size; j++) {
                if (nums[i] + nums[j] == target) {
                    return {i, j};
                }
            }
        }
        return {};
    }
};
哈希表

上面暴力枚举的方法虽然可以解决问题,但是因为需要两次遍历时间复杂度较高,可以引入哈希表在牺牲一定空间的前提下降低时间复杂度。遍历时先判断哈希表中是否有target - nums[i],如果有就返回结果,如果没有则将数组值作为Key,数组索引作为Value存入哈希表。这里拿数组值作为Key可能会有冲突,但是这不影响最终结果。例如数组[2, 2, 1],目标值为3,最后返回结果为[1, 2],因为相同的数组值只会在遍历时更新哈希表对应的Key的Value,而判断条件是通过Key,所以不会影响。

JAVA
class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> hashtable = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (hashtable.containsKey(target - nums[i])) {
                return new int[]{hashtable.get(target - nums[i]), i};
            } else {
                hashtable.put(nums[i], i);
            }
        }  
        return new int[0];
    }
}
Pyhton3
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashtable = {}
        for i, num in enumerate(nums):
            if target - num in hashtable:
                return [hashtable[target - num], i]
            hashtable[num] = i
        return []        
C++
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
         unordered_map<int, int> hashtable;
        for (int i = 0; i < nums.size(); i++) {
            auto it = hashtable.find(target - nums[i]);
            if (it != hashtable.end()) {
                return {it->second, i};
            }
            hashtable[nums[i]] = i;
        }
        return {};
    }
};

最后

有兴趣可以关注公众号QStack,会不定期发一些文章和学习资源。

c++每日力扣之数组元素删除 【代码】c++每日力扣之数组元素删除。 阅读详情

相关推荐

Plant simulation、Flexsim、Automod、Emulate3D、VisuaComponent仿真软件对比

E3D在行业内以展示效果好,入门阶段易学易用人机界面友好,电控仿真连接方便不需要借助其他第三方软件,E3D平台开放度较高用户DIY程度强,数据分析功能针对要评定对象的KPI的可根据项目或者使用者需求进行评定。3.支持导入导出多种格式的文件,比如dwg、dxf、fbx、obj、3ds、step、stp、iges、skp、stl、wrl、 bmp 等等。3.软件自带模型组件库程序代码开放,用户可以引用、修改、拷贝,按照自己的逻辑修改模型,或者创建模型并保存到组件库与别人共享。3. 支持导出布局图片。

qq_43342303的博客 3581

leetcode 46. 全排列

一、题目 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 二、解法 思路:回溯法(本质就是dfs) 全排列就是要将n个数字填入n个空格中。如果我们已知前面k个空格已经填好,现在需要填一个数,那么只需要在后面n-k个数中间选一个即可。 回溯的意思是,每一次选就是简单的将后面的元素和前面的元素进行交换,然后继续进行下

livingsu的博客 174

BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载

BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载问题

qq_45176349的博客 4968

LeetCode 数组 题目总结

1.两数之和 题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 暴...

人大神成长记2 1万+

AD9361数字调制入门:从IQ调制原理到动手实现第一个ASK信号(Vivado工程详解)

本文详细介绍了如何使用AD9361射频收发器实现ASK数字调制,从IQ调制原理到Vivado工程实现。通过Verilog代码示例和FPGA架构设计,帮助开发者理解纯逻辑实现数字调制解调的关键技术,特别适合软件无线电(SDR)初学者入门实践。

weixin_29158047的博客 374

AI赋能合同审查:构建租赁合同智能审核系统的全流程解析

在商业地产、设备租赁等场景中,合同审核效率直接影响业务流转速度。传统人工审核存在三大痛点:审核周期长(平均2-3个工作日)、合规风险高(条款遗漏率约15%)、人力成本居高不下。智能审核系统可将审核时间压缩至秒级,风险识别准确率提升至98%以上。

理论都是虚的,代码才是王道。 1356

每日一课 | 数组内存及数组面试常问算法全解析

01.数组内存及面试大家好,我是营长,上期分享的《案例上手Python数据可视化》专栏七天打卡结束了,如果忘记的小伙伴可以进入公号查看往期文章哦~本期邀请的是春晨溅雨·4位算法工程师为我们...

Python大本营的博客 303

Android 13.0 开机启动优化之PMS扫描apk耗时相关功能优化

在android13.0的系统rom定制化开发中,在系统中开发产品时,会根据客户要求内置第三方app,这时如果内置app过多,或者安装的app过多,在系统开机的过程中 在pms扫描安装app的时候,就会比较耗时,这时候就需要优化下pms扫描安装app这块的功能代码,用多线程来实现pms扫描安装app,来加快开机时间,接下来 来实现这个功能

安卓兼职framework和app工程师的博客 1335

【1】每日一到算法题。数组反转。

【一】解法一 public static int [] reverseArray1(int [] arra){ if(arra==null||arra.length==0){ return null; } int length = arra.length; for(int i=0;i...

Andrew_lee's blog 447

零基础入门simulink仿真--通信领域的调制解调技术:基于Simulink的PM信号调制与解调仿真建模示例

PM的基本原理是将基带信号(如语音或音乐信号)加载到高频载波信号的相位上。通过改变载波的瞬时相位,可以实现信息的传输。PM的优点包括抗噪声能力强、频谱利用率较高等,但其解调过程相对复杂。通过Simulink,我们可以通过模块化的建模方式实现PM信号的调制和解调过程,并观察信号在信道中的传输效果。通过本指南,我们介绍了如何基于Simulink搭建一个完整的PM信号调制与解调仿真模型,并进行仿真和性能评估。背景介绍:理解PM信号调制与解调的基本原理及其应用。所需工具和环境:列出进行PM仿真所需的工具和环境。

amy_mhd的博客 607

FM20S用户手册--Linux系统启动卡制作及系统固化

评估板出厂时,默认提供一张配套的Micro SD卡,此卡为可正常使用的Linux系统 启动卡。评估板断电,将Linux系统启动卡插入评估板Micro SD卡槽,根据评估底板丝印将 启动方式选择拨码开关拨为1010(1-4).此档位为Micro SD启动模式。使用Linux 系统启动卡启动系统时,将使用此目录的BOOTbn文件启动FSBL和U-Boot。Linux系统启动卡制作时,已将固化系统的脚本文件mkemmcboot.sh拷贝至Linux系 统启动卡文件系统的"/opt/tools/"目录下。

创龙,嵌入式一体化解决方案商 303

每日一个小算法(一) 数组中连续个数组成的和最大

题目:输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18。 public class max { public static vo

程序员孙大喵丶的博客 576

高通平台N4单路输入的720P相机预览

N4的一路720P Camera作为MIPI摄像头使用

llw21680的专栏 165

❤️算法笔记❤️-(每日一刷-303、区域和检索数组-数组不可变)

前缀和 数组的技巧

令狐_JackieHao的博客 314

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

❤️算法笔记❤️-(每日一刷-26、删除有序数组的重复项)

数组双指针解题套路-快慢指针法

令狐_JackieHao的博客 652

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

leetcode初级算法每日一题(一)----删除排序数组中的重复项

第一种,python逆序输出 第二种双指针 第一个指针i遍历整个数组,第二个指针j指向新数组的最后一个位置,当nums[i]和nums[j]不相等时 ,nums[i]有效,j往后推一位

wqy12138的博客 781

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【贪玩巴斯】每日一练——《力扣:LeetCode 算法入门》(C++):数组——「加一」 2021-11-02

题目 作者:力扣 (LeetCode) 链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2cv1c/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 题目:加一 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1:

D16100的博客 252

python每日算法 (一)在排序数组中查找元素的第一个和最后一个位置

在排序数组中查找元素的第一个和最后一个位置 线性遍历 def searchRange(nums, target): first = last = -1 flag = False for i in range(len(nums)): if nums[i] == target: if not flag: first = last = i flag = True .

m0_59388634的博客 962

算法题之每日温度

给定一个整数数组,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。

fengshi95的博客 697

LeetCode刷题66-简单-加一

LeetCode刷题66-简单-加一

布小禅的博客 1436

<LeetCode天梯>Day010 加一 | 初级算法 | Python

工作日,周四,实验室线路改造装修,终于搞到一半了,疫情反复,大家带好口罩啊~ 继续继续,来,今天和车神哥一起来提升自己的Python编程和面试能力吧,刷天梯~ 以下为我的天梯积分规则: 每日至少一题:一题积分+10分 若多做了一题,则当日积分+20分(+10+10) 若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60) 初始分为100分 若差一天没做题,则扣积分-10分(周六、周日除外注:休息) 坚持!!! 初级算

车手只需要车和手,压力来自轮胎 874

【LeetCode 热题 100】739. 每日温度——(解法二)单调栈+从左到右

Problem:给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

最短的捷径就是绕远路,绕远路才是我的最短捷径。 1280

每日一题.设计相邻元素求和服务;暴力算法与哈希表的运用

本题出自,可以说比昨天的那道“每日抑题”简单不少呀,就是代码长一点,同时本题目使用了两种不同的方法,并对每一种用法进行了深度解析。本文全长5000字。

yzxyy_zzb的博客 1069

算法记录 | Day58 单调栈

思路:1.首先,将答案数组ans全部赋值为 0。然后遍历数组每个位置元素。2.如果栈为空,则将当前元素的下标入栈。3.如果栈不为空,且当前数字大于栈顶元素对应数字,则栈顶元素出栈,并计算下标差。4.此时当前元素就是栈顶元素的下一个更高值,将其下标差存入答案数组ans中保存起来,判断栈顶元素。5.直到当前数字小于或等于栈顶元素,则停止出栈,将当前元素下标入栈。6.最后输出答案数组ans。

m0_37634594的博客 462

hot100—72.每日温度

对于温度列表 [73,74,75,71,69,72,76,73],单调栈 stack 的初始状态为空,答案 ans 的初始状态是 [0,0,0,0,0,0,0,0],按照以下步骤更新单调栈和答案,其中单调栈内的元素都是下标,括号内的数字表示下标在温度列表中对应的温度。由于单调栈满足从栈底到栈顶元素对应的温度递减,因此每次有元素进栈时,会将温度更低的元素全部移除,并更新出栈元素对应的等待天数,这样可以确保等待天数一定是最小的。正向遍历温度列表一遍,对于温度列表中的每个下标,最多有一次进栈和出栈的操作。

2302_80434765的博客 783
上一篇: Android触屏输入处理:记录“立即购买”短暂的一生(上)
下一篇: 每日算法之数组(二)
QStack
博客等级 码龄6年 30粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值