关闭

[置顶] 左程云《程序员代码面试指南》Python版(个人读书笔记)

说明  最近一直在读左神的书——《程序员代码面试指南—IT名企算法与数据结构题目最优解》,为了记录自己的学习成果,并且方便以后查看,将自己读书时的想法与使用python实现的代码记录在此博客。特别说明:在读书的过程中,有几道题看了一眼就放弃了,日后有机会再补。   博客还未更新完,持续更新中…二叉树问题 二叉树的前中后序的递归,非递归及Morris遍历 打印二叉树的边界节点 二叉搜索树查找、插入...
阅读(86) 评论(0)

数组与矩阵---数组排序之后相邻数的最大差值

【题目】  给定一个整型数组arr,返回排序后的相邻两数的最大差值   例如:   arr = [9, 3, 1, 10]。如果排序,结果为[1, 3, 9, 10],9和3的差为最大值,故返回6.   arr = [5, 5, 5, 5]。返回0.   要求时间复杂度O(N).【基本思路】  利用桶排序的思想(不是直接进行桶排序),可以做到时间复杂度O(N),空间复杂度O(N)。  遍历数...
阅读(22) 评论(0)

数组与矩阵---数组中未出现的最小正整数

【题目】  给定一个无序整型数组arr,找到数组中未出现的最小正整数。   例如:   arr = [-1, 2, 3, 4],返回1   arr = [1, 2, 3, 4],返回5【基本思路】  生成变量left和right,left表示遍历到目前为止,数组中已经包含的正整数的范围是[1…left],初始时令left = 0表示没有arr目前没有包含任何正整数;right表示遍历到目前为止...
阅读(18) 评论(0)

数组与矩阵---求最短通路值

【题目】  给定一个整型矩阵matrix表示一个网络,1代表有路,0代表无路,每一个位置只要不越界,都有上下左右四个方向,求从最左上角到最右下角的最短通路值。   例如,matrix为:   1 0 1 1 1   1 0 1 0 1   1 1 1 0 1   0 0 0 0 1    通路只有一条,由12个1构成,所以返回12。【基本思路】  使用宽度优先遍历即可。生成map矩阵,m...
阅读(21) 评论(0)

数组与矩阵---数组的partiton调整

【题目】  给定一个有序数组arr,调整arr使得这个数组的左边部分没有重复元素且升序,而不用保证右半部分是否有序。 例如,arr = [1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 8, 9],调整之后arr = [1, 2, 3, 4, 5, 6, 7, 8, 9……]【补充题目】  给定一个数组arr,其中只可能含有0,1,2三个值,请实现arr的排序。...
阅读(11) 评论(0)

数组与矩阵---不包含本位置值的累乘数组

【题目】  给定一个整型数组arr,返回不包含本位置值的累乘数组。   例如,arr = [2, 3, 4, 1],返回[12, 8, 24, 6],即除自己以外,其他位置上的累乘。【要求】 时间复杂度O(N) 除需要返回的结果数组外,额外空间复杂度O(1)。 【基本思路】  方法一。使用除法进行实现。所有数的累积记为all,如果数组中不存在0,那么结果数组中每一个位置的值为 all/arr[i]...
阅读(9) 评论(0)

数组与矩阵---边界都是1的最大正方形大小

【题目】  给定一个N×N的矩阵matrix,在这个矩阵中,只有0和1两种值,返回边框全是1的最大正方形的边长长度。   例如:   0 1 1 1 1   0 1 0 0 1   0 1 0 0 1   0 1 0 1 1   其中,边框全是1的最大正方形的大小是4*4,返回4。【基本思路】 比较容易理解的方法: 矩阵中一共有N*N个位置。O(N2N^2) 每一个位置都可以成为边长为N...
阅读(27) 评论(0)

数组与矩阵---打印N个数组整体最大的TopK

【题目】  有N个长度不一的数组,所有的数组都是有序的,请从大到小打印这个N个数组整体最大的前K个数。   例如,输入含有N行元素的二维数组可以代表N个一维数组。   219, 405, 538, 845, 971   148, 558   52, 99, 348, 691   再输入整数k = 5,则打印:   971, 845, 691, 558, 538【要求】 如果所有数组的元素...
阅读(46) 评论(0)

数组与矩阵---数组中子数组的最大累乘积

【题目】  给定一个double类型的数组arr,其中的元素可正、可负、可0,返回子数组累乘的最大乘积。例如,arr = [-2.5, 4, 0, 3, 0.5, 8, -1],子数组[3, 0.5, 8]累乘可以获得最大的乘积12,所以返回12.【基本思路】  本题可以做到时间复杂度O(N)、空间复杂度O(1).  大致思路是,遍历一遍数组,求出以每一个元素结尾的子数组的最大累乘积。如何快速的求出...
阅读(102) 评论(0)

数组与矩阵---在数组中找到一个局部最小的位置

【题目】  定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0] < arr[1],那么arr[0]是局部最小;如果arr[N-1] < arr[N-2],那么arr[N-1]是局部最小;如果 0 < i < N-1,既有 arr[i] < arr[i-1],又有arr[i] < arr[i+1],那么arr[i]是局部最小。   给定无序数...
阅读(45) 评论(0)

数组与矩阵---子矩阵的最大累加和问题

【题目】  给定一个矩阵matrix,其中的值有正、有负、有0,返回子矩阵的最大累加和。   例如,matrix为:   -1 -1 -1   -1  2  2   -1 -1 -1   其中最大累加和的子矩阵为:   2 2   所以返回4。【基本思路】  首先看这样一个例子,假设一个2行4列的矩阵如下:   -2  3  -5  7   1  4  -1  -3   如何求必...
阅读(22) 评论(0)

数组与矩阵问题---子数组的最大累加和问题

【题目】  给定一个数组arr,返回子数组的最大累加和,   例如,arr = [1, -2, 3, 5, -2, 6, 1],所有的子数组中,[3, 5, -2, 6]可以累加出最大的累加和为12,所以返回12。【基本思路】  使用一个变量curSum记录每一步的累加和,遍历到正数curSum增加,遍历到负数减小。当curSum < 0,说明累加到当前位置出现了小于0的结果,那么累加的这一部分肯...
阅读(26) 评论(0)

数组与矩阵---奇数下标都是奇数或者偶数下标都是偶数

【题目】  给定一个长度不小于2的数组arr,实现一个函数调整arr,要么让所有的偶数下标都是偶数,要么让所有的奇数下标都是奇数。要求时间复杂度O(N),空间复杂度O(1)。【基本思路】  使用两个指针even、odd。odd一直指向奇数位置,even一直指向偶数位置。初始是 even = 0、odd = 1。不断的检查数组最后一个数,如果该数是奇数就和odd位置的数交换,同时,odd += 2;如...
阅读(18) 评论(0)

数组与矩阵---自然数组的排序

【题目】  给定一个长度为N的整型数组arr,其中有N个互不相等的自然数1~N,请实现arr的排序,但是不要把下标0~N-1位置上的数通过直接赋值的方式替换成1~N。【基本思路】  arr调整之后应该满足arr[index] = index + 1. 方法一。 从左到右遍历数组,假设遍历到位置 i 如果arr[i] == i+1,说明当前的位置不需要调整,继续遍历下一个位置 如果arr[i] !=...
阅读(21) 评论(0)

数组与矩阵---计算数组的小和

【题目】  数组小和的定义如下:   例如:数组s = [1, 3, 5, 2, 4, 6],在s[0]的左边小于或者等于s[0]的数的和为0,在s[1]的左边小于或等于s[1]的数的和为1……将所有位置的左边比它小或者等于的数的和相加起来就是小和。   给定一个数组,实现函数返回s的小和。【基本思路】  最简单易懂的方法,就是依次遍历数组每一个位置 i,然后再遍历一次找到 i 左边所有小于或者...
阅读(58) 评论(0)

数组与矩阵---未排序数组中累加和小于或等于给定值的最长子数组问题

【题目】  给定一个无序数组arr,其中元素可正、可负、可0,给定一个整数k。求arr所有的子数组中累加和小于或等于k的最长子数组长度。      例如:arr = [3, -2, -4, 0, 6],k = -2,相加和小于或等于-2的最长子数组为[3, -2, -4, 0],所以结果返回4。【基本思路】  该题可以做到时间复杂度O(NlogN),空间复杂度O(N)。   依次求以数组每个位...
阅读(18) 评论(0)

数组与矩阵---未排序数组中累加和为给定值的最长子数组系列问题

【题目】  给定一个无序数组arr,其中元素可正、可负、可 0,给定一个整数k。求arr所有子数组中累加和为k的最长子数组长度。【补充问题】  给定一个无序数组arr,其中元素可正、可负、可 0。求arr所有子数组中正数与负数个数相同的最长子数组长度。【补充问题】  给定一个无序数组arr,其中元素只是 1 或 0。求arr所有的子数组中 0 和 1 个数相等的最长数组长度。【基本思路】  使用一个...
阅读(15) 评论(0)

数组与矩阵---未排序正数数组中累加和为之指定值的最长子数组长度

【题目】  给定一个数组arr,该数组无序,但每个值都为正数,在给定一个正数k。求arr中所有的子数组中所有元素累加为k的最长子数组长度。   例如,arr = [1,2,1,1,1],k = 3.   累加和为3的最长子数组为[1,1,1],所以返回结果为3。【基本思路】  使用两个指针left和right,代表子数组的范围,初始时都为 0。使用变量sum记录子数组的累加和,初始为arr[0]...
阅读(20) 评论(0)

数组与矩阵---不重复打印排序数组中相加和为给定值的所有二元组和三元组

【题目】  给定排序数组arr和整数k,不重复打印arr中所有相加和为k的不降序二元组。例如,arr = [-8, -4, -3, 0, 1, 2, 4, 5, 8, 9],k = 10,打印结果为:1,9 2,8【补充题目】  给定排序数组arr和整数k,不重复打印arr中所有相加和为k的不降序三元组。例如,arr = [-8, -4, -3, 0, 1, 2, 4, 5, 8, 9],k = 1...
阅读(18) 评论(0)

数组与矩阵---最长可整合子数组的长度

【题目】  先给出可整合数组的定义。如果一个数组在排序后,每相邻两个数的差的绝对值都是1,则该数组为可整合数组。例如,[5,3,4,6,2]排序之后为[2,3,4,5,6],符合条件,所以这个数组为可整合数组。   给定一个整型数组arr,请返回其中最大可整合子数组的长度。例如,[5,5,3,2,6,4,3]的最大可整合子数组为[5,3,2,6,4],所以返回5【基本思路】  方法一。时间复杂度O...
阅读(21) 评论(0)

数组与矩阵---在行列都排好的矩阵中找数

【题目】  给定一个N×M的整型矩阵matrix和一个正数K,matrix的每一行每一列都是排好序的。实现一个函数,判断K是否在matrix中。   例如:   0, 1, 2, 5   2, 3, 4, 7   4, 4, 4, 8   5, 7, 7, 9 如果K为7,返回True;如果K为6,返回False。 要求时间复杂度O(N+M),空间复杂度O(1)。【基本思路】  从第一...
阅读(16) 评论(0)
105条 共6页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:6296次
    • 积分:1244
    • 等级:
    • 排名:千里之外
    • 原创:98篇
    • 转载:2篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论