LeetCode第一天(实际第二天)

Leetcode-How-What 力扣Leetcode刷题指南 Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the interview and the solutions to some Leetcode problems’. 怎样为准备面试机智聪明的刷题(高效刷题)以及一些题目的题解。 同 github 链接: https:/... 阅读详情

写在前面:题目来源于剑指offer,有些题解也是offer中的,所以想看的更加详细,请直接在LeetCode上搜索

问题一:单词长度的最大乘积

题目:给定一个字符串数组 words,请计算当两个字符串 words[i] 和 words[j] 不包含相同字符时,它们长度的乘积的最大值。假设字符串中只包含英语的小写字母。如果没有不包含相同字符的一对字符串,返回 0。

题目拆解:

1)找到两个不包含相同字符的字符串

2)计算字符串长度的乘积

初始思路:

四层for循环,遍历所有结果

        int ans = 0;

        for(int i =0;i<words.size() - 1;++i)

        {

            for (int j = i + 1; j < words.size(); ++j)

            {

                bool sign = true;

                //判断 两个字符是否存在相等字母

                int w1 = words[i].size(), w2 = words[j].size();

                int nsize = min(w1, w2);

                for (int k = 0; k < w1; ++k)

                {

                    for(int m = 0; m < w2; ++m)

                    {

                        if (words[i][k] == words[j][m])

                        {

                            sign = false;

                            break;

                        }

                    }

                    if(!sign)

                    {

                        break;

                    }

                }

                int temp = w1 * w2;

                if (sign && ans < temp)

                    ans = temp;

            }

        }

        return ans;

测试结果:超出时间限制。

优化思路:

1)减少比较时间。测试用例中,超出时间的原因是,每个字符串都是相同字符,而且特别长。同时从题目中也可以发现,字符串的输入范围是26个小写字母,可以借助位运算简化比较过程。

示例“abc” = 0000...0111;“abbc” = 0000...0111;

一开始想半天不知道如何用位运算表达,看了题解才发现如此简单,学无止境。

       int sumlen = words.size();

        int i =0,j=0;

        vector<int> maskdata(sumlen,0);

        for(i = 0; i<sumlen;++i)

        {

            for(j = 0; j<words[i].size(); ++j)

            {

                maskdata[i] |= (1<<(words[i][j] - 'a'));

            }

        }

        int ans = 0;

        for(i =0;i<words.size() - 1;++i)

        {

            for (j = i + 1; j < words.size(); ++j)

            {

                int w1 = words[i].size(), w2 = words[j].size();

                int temp = w1 * w2;

                // 比当前答案大才有计算的必要

                if(temp < ans)

                    continue;

                // 判断是否存在相同字符

                if(maskdata[i] & maskdata[j])

                    continue;

                // 更新答案

                ans = temp;

            }

        }

        return ans;

上述代码是看过题解之后自己编写的,算是一点点自己的东西,哈哈,又是无效学习的一天。

此时我已经想不到优化的方向了,所以继续看题解:

题解中的优化是考虑到了mask重复的问题,进行减少计算,但是大方向并没有改变,因此并不是另一种思路。

启示:位运算也可以做去重复的操作。

题目二:排序数组中两个数字之和

给定一个已按照 升序排列  的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target

解题思路:

问题定性为查找问题,而且已知数组为升序数组,所以目标应该进一步细化为减少搜索任务上,因此,我的第一个思路为遍历数组,有序从数组中取值与target作差,在数组中通过二分法查找差值。

        int first = 0;

        int nsize = numbers.size();

        for(first = 0; first < nsize; ++first)

        {

            int ohalf = target - numbers[first];

            int bl = first +1;

            int br = nsize - 1;

            while(bl<=br)

            {

                int mid = bl + ( (br - bl) >> 1);

                if(numbers[mid] == ohalf)

                    return {first, mid};

                else if(numbers[mid] > ohalf)

                    br = mid - 1;

                else

                    bl = mid + 1;

            }

        }

        return {0};

编写过程中自己的问题是,二分查找的判断条件,左边边界是小于等于还是小于,如果是小于,则跳出while循环时还需要讨论左边是否等于右边界的情况。

还有一个思维误区是判断是否加1的问题,在选择小于的情况下,如何解决3和4反复横跳的问题。一直陷在思维误区,因此以后遇到二分查找问题,只需要考虑数据即可

查找模式

int bl = 查找起始位置

int br = 查找结束位置

while(bl <= br)

{

        int mid = bl + ( (br - bl) >> 1);

        if(等于中间值)

        else if(大于中间值)

                mid + 1

        else 小于中间值

                mid - 1

}

现在做题做的比较少,先这样考虑,遇到新问题再回来修改(2022.8.1)

昨天临走,又发现双指针方法也适合有序数组的查找

        int bl = 0;

        int br = numbers.size() - 1;

        while(bl < br)

        {

            if(numbers[bl] + numbers[br] == target)

                return {bl,br};

            else if(numbers[bl]+numbers[br]>target)

                br -=1;

            else

                bl +=1;

        }

        return {0};

总结:

二分查找、双指针、位运算去重

力扣(Leetcode)第1题:两数之和(C语言版本) 题目: 给定一个整数数组 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 阅读详情

相关推荐

刷力扣 LeetCode 算法题需要充值会员吗?

刷力扣算法题,需要充值会员吗?我的体验是会!为什么?请看文章

负雪明烛 1万+

面试算法5:单词长度的最大乘积

输入一个字符串数组words,请计算不包含相同字符的两个字符串words[i]和words[j]的长度乘积的最大值。如果所有字符串都包含至少一个相同字符,那么返回0。假设字符串中只包含英文小写字母。例如,输入的字符串数组words为[“abcw”,“foo”,“bar”,“fxyz”,“abcdef”],数组中的字符串"bar"与"foo"没有相同的字符,它们长度的乘积为9。"abcw"与"fxyz"也没有相同的字符,它们长度的乘积为16,这是该数组不包含相同字符的一对字符串的长度乘积的最大值。

Winn~ 372

微调BERT进行中文文本分类任务(Pytorch代码实现)

BERT(Bidirectional Encoder Representation from Transformers)是2018年10月由Google AI研究院提出的一种预训练模型。其模型结构由多层Transformer的Encoder堆叠而成,在大规模语料中进行预训练后,迁移到下游任务,仅进行参数微调训练,就能显著提升性能。本文聚焦于微调中文BERT进行新闻标题分类任务的代码实现。

Iswayzw的博客 1万+

318. 最大单词长度乘积-将单词转化为位运算

给定一个字符串数组words,找到length(word[i]) * length(word[j])的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。 示例1: 输入: ["abcw","baz","foo","bar","xtfn","abcdef"] 输出: 16 解释: 这两个单词为 "abcw", "xtfn"。 示...

嗑盐工作室 361

高精度有源积分器设计:基于罗氏线圈的电流测量方案解析

在电力系统保护、工业自动化及高精度计量领域,电流的非接触式精确测量是核心需求。传统电流互感器存在磁芯饱和、频带受限等局限,难以应对现代电力电子设备产生的复杂波形。罗氏线圈作为一种空心电流传感器,凭借其宽频带、高线性度及无饱和风险的优势,成为理想解决方案。其工作原理基于法拉第电磁感应定律,输出信号与被测电流的导数成正比,因此必须通过积分运算恢复原始电流波形。积分器的精度、稳定性及动态响应直接决定了整个测量系统的性能上限。一个设计精良的有源积分器能有效解决直流漂移、相位误差及噪声放大等挑战,在继电器保护、断路器

weixin_30036289的博客 314

手把手教你用ADS和CGH40010F模型搭建Doherty功放仿真原型(附工程文件)

本文详细介绍了如何使用ADS软件和CGH40010F GaN器件模型搭建Doherty功放仿真原型,涵盖工程准备、关键电路模块实现、效率优化技巧及常见问题排查。通过实战指南和效率优化技巧,帮助工程师快速掌握Doherty功放设计,提升5G基站和广播发射系统的功率放大器性能。

weixin_26897585的博客 344

单词长度的最大乘积

题目: 输入一个字符串数组words,请计算不包含相同字符的两个字符串words[i]和words[j]的长度乘积的最大值。如果所有字符串都包含至少一个相同字符,那么返回0。假设字符串中只包含英文小写字母。例如,输入的字符串数组words为[“abcw”,“foo”,“bar”,“fxyz”,“abcdef”,],数组中的字符串"bar"与"foo"没有相同的字符,他们长度的乘积为9。"abcw"与"fxyz"也没有相同的字符,它们长度的乘积为16,这是该数组不包含相同字符的一对字符串的长度乘积的最大值。.

m0_53245772的博客 267

在 Eclipse 里快速用上 SAP Joule:ABAP 开发者的 AI 助手上手指南

本文介绍了SAP Joule for developers如何集成在ABAP开发工具中,为开发者提供AI辅助能力。主要内容包括: Joule作为ADT的增强层,直接嵌入开发流程,支持在项目资源管理器、代码编辑器等场景下通过上下文菜单调用AI功能。 核心使用方式:打开Joule视图后,可在开发对象、代码片段等上下文中使用自然语言交互,请求解释、生成测试或获取示例代码。 重点功能: Explain:解释现有代码逻辑,降低理解成本 ABAP Unit测试生成:快速创建与上下文相关的测试用例 支持在传输管理器等完整

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 392

【leetcode】单词长度的最大乘积

字符串操作、位运算、计数优化

weixin_44627672的博客 305

先进封装类别分析与典型案例

当制程微缩逼近物理极限、单颗大芯片(reticle limit)面积受限于光罩尺寸,且逻辑、存储、射频、传感等功能无法用同一套工艺最经济地制造时,性能增益的来源从 "晶体管密度" 转向 "互连密度"。先进封装的本质,是在芯片外部用更短、更密、更宽的路径把多个裸 die(die)互连起来,换取更高带宽、更低延迟、更小体积和异构集成能力。行业通常按划分为 2D、2.5D、3D、扇出、SiP 五大谱系,Chiplet/UCIe 则是贯穿其上的设计方法论,玻璃基板、共封装光学(CPO)是正在成型的新分支。

0 31

基于coze studio开源框架二次定制开发教程

CozeStudio是一站式AIAgent开发工具,支持大模型接入、智能体编排、工作流开发等功能。采用Golang+React技术栈,基于微服务架构设计。项目包含后端API、领域逻辑、前端应用等模块,支持自定义任务流节点开发。开发流程涵盖前后端节点定义、实现逻辑编写等步骤,提供完整的开发规范和参考文档。相比商业版,开源版本在功能上有所精简,但仍保留核心开发能力。

coding change your life 790

LeetCode使用简介(leetcode中国-力扣)

没有入过英文版官网的坑,现在中文版官网也出来许久并且已经比较完善,题库也是通的,现在就直接使用LeetCode中国。 经过测试,到2019.11账号还是不通的,使用在中文版注册的账号密码是无法登陆英文版的,都绑定并使用github登录得到的不同的账号。能查到的18年的关于leetcode账号数据同步到leetcode中国的帖子,因为18年leetcode中国才刚刚出现还有很多不完善的地方,不太好使...

Sophia_fez的博客 1万+

从0到1打造工业级上位机:通信协议到架构设计的实战全流程

作为一名在工控领域摸爬滚打十余年的开发者,前阵子刚帮一家新能源工厂完成了一套工业上位机系统的从0到1搭建。从最初和PLC通信联调时的“连不上、传错数”,到最终系统7×24小时稳定运行,踩过的坑、攒下的实战经验,今天就毫无保留地拆解给各位同行。这篇文章会从通信层、数据层、UI层到架构层逐层深入,全是工业现场验证过的干货,新手也能跟着落地。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 661

LeetCode 力扣算法题解汇总,All in One

我刷过的所有 leetcode 算法题解的汇总。 题目的排列顺序是按照先Easy再Medium再Hard排列的,暂时还没有把题目全部整理完成。后序我会把刷过的所有的题目都整理到这个文档里。 如果想看我全部的力扣算法题解,可以看我的题解博客:[fuxuemingzhu.cn](fuxuemingzhu.cn)

负雪明烛 1万+

论文必备 - YOLOv12热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv12热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 1706

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

在 vscode 上刷力扣 Leetcode 可以这样来

用vscode刷LeetCode算法,其乐无穷

梦幻通灵 3万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【LeetCode】力扣刷题记录第一天

[LeetCode]边刷题边学习

2301_77031350的博客 1077

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【力扣 | SQL题 | 每日3题】力扣1097,1149,1070

1hard + 2 mid,难度还行,当做练手。

2301_80912559的博客 1548

1097. 游戏玩法分析 V - 力扣(LeetCode)

玩家 1 和 3 在 2016-03-01 安装了游戏,但只有玩家 1 在 2016-03-02 重新登录,所以 2016-03-01 的第一天留存率是 1/2=0.50。玩家 2 在 2017-06-25 安装了游戏,但在 2017-06-26 没有重新登录,因此 2017-06-25 的第一天留存率为 0/1=0.00。:首先,我们需要确定每个玩家的安装日期,即他们第一次登录游戏的日期。:对于每个安装日期,我们需要计算在安装日期的第二天登录的玩家数量。:使用留存玩家数量除以新玩家数量,得到留存率。

qq_58114907的博客 1154

【PythonCode】力扣Leetcode26~30题Python版

力扣26-30

weixin_43790276的博客 2013

【LeetCode面试TOP100】力扣打卡第一天!

LeetCode30天训练计划第一天!

冲击大厂之路!!! 1587

力扣打卡第二天

1 ... n。

JUIU9527的博客 438

leetcode数据结构题解(Java实现,第一天和第二天)

其次本题采用第三种遍历方式:即以某个节点为尾的所有字串进行遍历和,假设有数组nums,且dp[i],表示以第i个数为尾的子串和,则dp[i]=dp[i-1]+nums[i],而要使得dp[i]是最大的子串的话,就要分在遍历的过程中,如果dp[i-1]为负数,则以第i个数为结尾的字串和即为本身,因为nums[i]加上一个负数都会使得整体值小于nums[i];1.以某个节点为头的所有子序列,如数组[a,b,c,e],以a为头的字串为【a】,【a,b】,【a,b,c】,【a,b,c,d】;代码(力扣模板模式)

LGL 1067

掌握这15种模式后,力扣(LeetCode)不再难

在掌握这15种模式之前,力扣(LeetCode)对我来说一直很难。

硅基创想家的博客 4312

【PythonCode】力扣Leetcode31~35题Python版

力扣31-35

weixin_43790276的博客 2080
下一篇: ACM输入接口合集
FlyingFish7
博客等级 码龄9年 7粉丝 2原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值