数组
子数组的最大和:
子数组要求是必须连续的(可以用动态规划)
通过逐渐推进,时间复杂度为O(N),用两个变量储存。
两个无重合部分的子数组的累加和:(时间是O(N),空间是O(N))
通过两个辅助数组L和R,储存正序和逆序的最大子数组的和,然后通过一次扫描在i位置的左边和右边的最大子数组的和的和,求出其最大值。
稍稍优化一下就是可以取消L数组,因为在最后遍历的时候本来就是从左往右,可以在遍历的时候求出即可。
未排序正数数组中累加和为定值的最长子数组的长度(双指针):(时间是N,空间是1):
面试中关于子数组问题的破题点:
必须以每个位置结尾的情况下,应该怎么做。当你得到以i结尾的情况下,通过复用i这个位置的结果,如何得到以i+1结尾的情况。
只关注两个指针L和R之间的累加和,像右边移动的策略:
如果和小于等于规定的值k,R向右移动;
如果和大于规定的值k,L向右移动。
当等于的时候记录最大的长度。
未排序数组中累加和不大于定值的最长子数组的长度(数组可正可负可为零):
创建累加和数组:
1 2 -4 5 -1 2 -1 5
1 3 -1 4 3 5 4 9
1 3 3 4 4 5 5 9 (单调递增可以用二分查找)
必须以i结尾的子数组的长度,看他能够往左扩多远。
0 1 2 3 4 5 6 7 8
i j
要求k>=Sum[i+1~j],因为Sum[j] = Sum[i] + Sum[i+1~j]
只需要找出Sum[i]+k>=Sum[j]的最小的i,即k>=Sum[i+1~j],证毕。
因此当处在j位置的时候,只需要找到Sum[i]>=Sum[j]-k,的最大长度即可。
当k=10时,Sum[j] = 4,只需要找到最先出现Sum[i]>=6的时候即可。
相关推荐
Go 语言面试题系列主要涉及了 Go 语言的基础语法、并发特性以及错误处理等方面的知识。以下是对这些知识点的详细解析: 1. **赋值与定义变量的区别**: - `=` 是赋值操作符,用于将右侧的值赋给左侧的变量。如果...
这些面试题涵盖了Java语言的核心概念,包括语法、面向对象、内存管理和类库使用。深入理解这些知识点对于成为一名优秀的Java开发者至关重要。面试中,面试官还会关注其他主题,如异常处理、多线程、集合框架、I/O流...
`HashMap`由“数组+链表+红黑树”组成,这意味着当链表长度超过一定阈值(通常是8)时,链表会被转换为红黑树以提高查找效率。 3. **synchronized**: - `synchronized`是Java的内置同步机制,它提供了互斥访问和...
以下是一些可能出现在"测试开发面试题"中的关键知识点: 1. **基础概念**: - **软件测试**:理解软件测试的目的是找出程序中的错误、缺陷和遗漏,确保产品的质量。 - **测试类型**:包括单元测试、集成测试、...
《世界500强面试题+程序员面试宝典》是一份综合性的资源,旨在帮助求职者,特别是程序员,准备世界顶级公司的面试。这份资料集合了全球知名企业的面试问题,涵盖了编程、算法、软件工程、系统设计等多个方面,是提升...
"java面试题-外企软件工程师面试题大全.rar"这个压缩包文件很可能包含了大量关于Java编程、设计模式、并发处理、数据结构与算法、框架应用等方面的面试题目,旨在帮助求职者准备这些挑战。 1. **Java基础知识**:...
在IT行业中,面试是检验求职者技能和知识的关键环节,特别是对于技术岗位而言,面试题往往涵盖各种核心领域。以下是一些基于标题、描述和标签的常见面试知识点,这些知识点在各大公司,如百度和Google的面试中尤其...
2. **Static**:在C语言中,`static`关键字用于修饰变量,表示局部变量具有静态存储持续性,或全局变量仅在当前文件可见。 3. **Const**:常量声明,保证变量的值在程序执行期间不可更改,有助于提高代码安全性和...
在Java编程领域,面试题是评估开发者技能和知识深度的重要工具。这100道经典Java面试题涵盖了广泛的Java应用和知识点,旨在帮助求职者...而对在职开发者来说,持续学习和回顾这些知识点也是保持技能更新的重要途径。
8. **大厂面试题**:大公司(如阿里、腾讯、字节跳动等)的面试题可能更加注重实际项目经验、问题解决能力和抽象思维。可能会有更复杂的设计模式、系统架构或性能优化的问题。 9. **高频面试题**:这些题目通常是...
七、ES6 数组面试题 ES6 中的数组有很多新的特性,在面试中,可能会被问到关于数组的相关问题,例如: * 如何使用 ES6 的 Array.prototype.find() 方法? * ES6 中的 Array.prototype.includes() 方法是什么? * ...
C语言面试题集针对单片机的考察涵盖了多个核心知识点,包括预处理器、死循环、数据声明、关键字Static、Const和Volatile、位操作、内存访问、中断、动态内存分配、Typedef以及一些复杂的语法。以下是对这些知识点的...
### 百度持续交付项目组面试题解析 #### 计算机基础 ##### 数据结构、算法 **代码实现快速排序** 快速排序是一种高效的排序算法,采用分治法策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子...
以下是对这些常见面试题的详细解析: 1. **PHP基础语法** - **变量声明**:PHP中的变量以$符号开头,如 `$name = 'John';` - **注释**:单行注释使用 `//`,多行注释使用 `/* ... */` - **输出语句**:`echo` 和...
### 计算机专业面试题解析 #### 一、预处理指令 `#define` 声明常数 - **知识点解析**: - **预处理指令**:`#define` 是 C 语言中的预处理指令之一,用于定义宏。在预编译阶段会被替换为指定的内容。 - **常数...
在IT行业的求职过程中,大公司的面试题往往涵盖了广泛的知识领域,包括但不限于计算机科学基础、算法与数据结构、操作系统、网络、数据库、编程语言特性和实践经验等。这些题目旨在测试候选人的逻辑思维能力、问题...
在C++面试中,了解和掌握预...这些面试题覆盖了C++的基础知识,包括预处理器、宏定义、无限循环以及数据类型的声明,这些都是C++程序员必备的知识点。理解并熟练运用这些概念对于成为一名合格的嵌入式程序员至关重要。
### Linux C面试题知识点解析 #### 一、预处理器(Preprocessor) 预处理器是C语言的一个重要组成部分,用于处理源代码文件,在实际编译之前进行替换、包含等操作。 ##### 1. 定义常数表示一年中的秒数 ```c #...