剑指Offer专项突击版题解一
1.整数除法
思想:不能用除法、乘法、取余,那么可以用减法完成除法的操作,但是在减去被除数的时候,可以考虑被除数<<1扩大一倍在进行减少,加快减的速率。
2.二进制加法
思想:从末尾向前遍历,类似这种有长短不一的需要累计的时候,可以采用for i>0 || j > 0 {内部在进行判断该值是否有贡献}
3.前n个数二进制1的个数
这里隐藏着2的倍数和之间二进制1的个数的关系,2和4的二进制个数相等。
4.出现1次的数字其余都是三次
原版本是找出出现一次的数字,其余都是出现两次,这个只需要全部异或就能得出答案,但是出现三次的要进行过滤的话,需要从二进制的角度去考虑,某一位,数组中累积和事3的倍数的话,这一位置肯定是出现三次的,否则是一位中的。注意:go语言中int是变化的,在这个题目中需要指定int32,否则会出现溢出的情况。
5.单词长度最大的乘积
题目要求:两个字符串之间没有字符交集
暴力做法:在单词数组中,找出两个互补包含相同字符的串的乘积的最大值,思路是采用暴力双层遍历,先对数组按照字符串的长度进行降序排序,关键是如何快速判断两个字符串包含相同的字符,超时做法是:用一个map记录a,然后在判断b,取巧的方式是采用strings.indexByte内置的api。
二进制做法(位运算):因为字符串只包含小写的英文字母,那么判断两个字符串是否有相同的字符可以考虑将字符串转换成数字,通过a&b ==0 表示字符串没有共同字符。
6.排序数组中找出两个数之和等于target
方法一:直接采用二分查找去做,方法二:可以采用变循环边加入map,通过map[tar-val]判断是否存在,一遍就能找出答案。
7.找出数组中三数之和为零的数
先排序,然后可以用两层遍历+去重复判断(i != 0 && nums[i] != nums[i-1),最后一维可以采用二分查找来做。
8.找出最短的字数组的和大于等于target的长度
暴力法:先计算前缀和,然后通过暴力从短到长的进行判断。
滑动窗口:由小窗口在逐渐变大,达到目的值的时候在逐渐减少(数组都是正数)。
func numSubarrayProductLessThanK(nums []int, k int) int {res := 0left := 0right := 0cv := 1for right < len(nums){cv *= nums[right]for left <= right && cv >= k { // 如果当前的滑动窗口需要进行变化cv /= nums[left]left++}res = res + (right - left + 1) // 含义:以right结尾的所有满足条件字数组的情况right++}return res
}
前缀和+二分查找:由于本题目的前缀和是递增的,因此也可以考虑用二分查找需要的值
9.找出子数组中积少的target的个数
滑动窗口:(数组中都为正数)
func numSubarrayProductLessThanK(nums []int, k int) int {res := 0left := 0right := 0cv := 1for right < len(nums){cv *= nums[right]for left <= right && cv >= k { // 如果当前的滑动窗口需要进行变化cv /= nums[left]left++}res = res + (right - left + 1) // 含义:以right结尾的所有满足条件字数组的情况right++}return res
}
10.和为k的子数组
很容易根据上面题目联想到使用滑动窗口,但是这题目nums中包含非正数,这导致了滑动窗口不知道往哪边滑,因此不能采取。
暴力法:枚举出所有的情况,最后几个用例超时了(暴力写法纠正),纠正暴力写法之后通过。
动态规划法:让我想到了01背包问题,01背包包括是否重复选,但是这里又和01重复选背包不同,这里要求是连续数组。
可以采用前缀和+加map一层遍历解决,思想和找出数组中两数之和为tar的方法一样。
遍历+map写法,只要target确定,可以考虑这种写法
func subarraySum(nums []int, k int) int {count, pre := 0, 0m := map[int]int{}m[0] = 1for i := 0; i < len(nums); i++ {pre += nums[i]if _, ok := m[pre - k]; ok {count += m[pre - k]}m[pre] += 1}return count
}
暴力写法的纠正
// 通过写法
func subarraySum(nums []int, k int) int {preSum := make([]int , len(nums))cv := 0res := 0for i := 0 ; i < len(nums); i++{cv += nums[i]preSum[i] = cv}// fmt.Println(preSum)for i := 0 ; i < len(nums); i++{for j := i ; j < len(nums); j++{cv := preSum[j]if i != 0{cv -= preSum[i-1]}if cv == k{res ++}}}return res
}
// 超时写法,很好理解代码的思路,但是超时
func subarraySum(nums []int, k int) int {preSum := make([]int , len(nums))cv := 0res := 0for i := 0 ; i < len(nums); i++{cv += nums[i]preSum[i] = cv}// fmt.Println(preSum)for clen:= 1; clen <= len(nums); clen++{for i := 0 ; i <= len(nums) - clen; i++{j := i + clen - 1if j >= len(nums){break}cv := preSum[j]if i != 0{cv -= preSum[i-1]}if cv == k{res++}// fmt.Println(cv)}}return res
}
相关文章:
剑指Offer专项突击版题解一
1.整数除法 思想:不能用除法、乘法、取余,那么可以用减法完成除法的操作,但是在减去被除数的时候,可以考虑被除数<<1扩大一倍在进行减少,加快减的速率。 2.二进制加法 思想:从末尾向前遍历࿰…...
Django框架之模型
模型 当前项目的开发, 都是数据驱动的。 以下为书籍信息管理的数据关系:书籍和人物是 :一对多关系 要先分析出项目中所需要的数据, 然后设计数据库表. 书籍信息表 字段名字段类型字段说明idAutoField主键nameCharField书名 idname1西游记2三国演义…...
OSACN-Net:使用深度学习和Gabor心电图信号谱图进行睡眠呼吸暂停分类
这篇文章在之前读过一次,其主要的思路就是利用Gabor变换,将心电信号转变为光谱图进行识别研究,总体来讲,不同于其他的利用心电信号分类的算法,该论文将心电信号转换为光谱图,在此基础上,分类问题…...
使用开源实时监控系统 HertzBeat 5分钟搞定 Mysql 数据库监控告警
使用开源实时监控系统 HertzBeat 对 Mysql 数据库监控告警实践,5分钟搞定! Mysql 数据库介绍 MySQL是一个开源关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的开源关系型数据库管理系统之…...
插件 sortablejs:HTML元素可拖动排序
插件 sortablejs 用于可重新排序拖放列表的JavaScript库;关键链接:npm 地址 Github 地址 安装 npm i sortablejs引入 import Sortable from "sortablejs"HTML <ul id"items"><li>item 1</li><li>item …...
libVLC 视频裁剪
作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 裁剪是指去除图像的外部部分,也就是从图像的左,右,顶部和/或底部移除一些东西。通常在视频中,裁剪是一种通过剪切不需要的部分来改变宽高比的特殊方式。 尤其是在做视频墙时,往往需要处理多个 vlc 实例…...
LAMP架构介绍及配置
LAMP架构介绍及配置一、LAMP简介与概述1、LAMP平台概述2、LAMP各组件主要作用3、构建LAMP平台二、编译安装Apache htpd服务1、将所需软件包上传到/opt目录下2、解压以下文件3、移动两个文件并改名4、安装所需工具5、编译安装6、做软连接,使文件可执行7、优化配置文件…...
Android图形显示流程简介
注:本文缩写说明本文代码都是基于Android S一、概述本文将对从App画出一帧画面到这帧画面是如何到达屏幕并最终被人眼看到的这一过程进行简要分析,并将这其中涉及到的各个流程与其在systrace上的体现对应起来,期望最终能够让读者对Android系统…...
4.5.3 ArrayList
文章目录1.特点2. 练习:ArrayList测试3.ArrayList扩容1.特点 存在java.util包中内部是用数组结构存放数据,封装数组的操作,每个对象都有下标内部数组默认的初始容量是10,如果不够会以1.5倍的容量增长查询快,增删数据效率会低 2. 练习:ArrayList测试 package partThree;import…...
十二、Linux文件 - fseek函数讲解
目录 一、fseek函数讲解 二、fseek函数实战 一、fseek函数讲解 重定向文件内部的指针 注:光标 ---- 文件内部的指针 函数原型: int fseek(FILE *stream,long offset,int framewhere) 参数: stream:文件指针offset:…...
Python3.10新特性之match语句示例详解
这篇文章主要为大家介绍了Python3.10新特性之match语句示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪正文在Python 3.10发布之前,Python是没有类似于其他语言中switch语句的&…...
虎牙盈利能力得到改善,但监管风险对其收入产生负面影响
来源:猛兽财经 作者:猛兽财经 监管风险再次成为焦点 过去一段时间,与中概股相关的监管风险再次引起了投资者的注意,这也是正在考虑投资虎牙(HUYA)的投资者需要注意的问题。 例如,监管机构在2022…...
HBase 分布式搭建
前言: 请先确保 Hadoop 集群搭建完成。 Hadoop 完全分布式搭建(超详细)搭建环境介绍: 三台主机,一主两从,系统为 Centos 7.5。 相关组件版本信息如下: jdk1.8hadoop-3.1.3zookeeper-3.5.7hbase-2.2.3注意,以下安装教程中涉及到的路径请替换成自己的! ZooKeeper 安…...
【Python】修改枚举的取值及链式调用
author: jwensh date: 2023.02.11 文章目录枚举的取值及链式调用需求背景1. enum.key 即获取值(而不是 enum.key.value)2. 多级链式调用枚举的取值及链式调用 需求背景 测试过程中需要很多参数化的设置及编程规范要求,希望修改数据不修改代…...
复现篇--zi2zi
intro: 用GAN学习东亚语言字体。zi2zi(意思是从字符到字符)是最近流行的pix2pix模型在汉字上的应用和扩展。 article:https://kaonashi-tyc.github.io/2017/04/06/zi2zi.html code:https://github.com/kaonashi-tyc/zi2zi pytorch版本:https://github.com/EuphoriaYan/zi2…...
153、【动态规划】leetcode ——416. 分割等和子集:滚动数组(C++版本)
题目描述 原题链接:1049. 最后一块石头的重量 II 解题思路 本题要找的是最小重量,我们可以将石头划分成两个集合,当两个集合的重量越接近时,相减后,可达到的装量就会是最小,此时本题的思路其实就类似于 4…...
linux head命令(head指令)(获取文件或管道输出结果前n行,默认前10行)与sed命令区别
head命令是一个在Linux系统中常用的命令,用于读取文件的前几行(默认读取前10行) 文章目录使用方法读取文件的前10行:head filename读取文件的前n行:head -n行数 filename读取多个文件的前几行:head -n 行数…...
Mysql数据库09——分组聚合函数
类似pandas里面的groupby函数,SQL里面的GROUP BY子句也是可以达到分组聚合的效果。 常用的聚合函数有COUNT(),SUM(),AVG(),MAX(),MIN(),其用法看名字都看的出来,下面一一介绍 聚合函数 COUNT()计数 统计student表中计科系学生的人数。 SE…...
第43章 菜单实体及其约束规则的定义实现
1 Core.Domain.Security.Menu namespace Core.Domain.Security { /// <summary> /// 【菜单--类】 /// <remarks> /// 摘要: /// 通过该实体类及其属性成员,用于实现当前程序【Core】.【领域】.【安全】.【菜单】实体与“[ShopDemo].[…...
OpenAI最重要的模型【CLIP】
最近的 AI 突破 DALLE和 Stable Diffusion有什么共同点? 它们都使用 CLIP 架构的组件。 因此,如果你想掌握这些模型是如何工作的,了解 CLIP 是先决条件。 此外,CLIP 已被用于在 Unsplash 上索引照片。 但是 CLIP 做了什么&…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
