![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构 数组和矩阵
温酒知莲华
这个作者很懒,什么都没留下…
展开
-
最大子数组和
题目描述:给定一个数组a[0,...,n-1],求其最大子数组(长度>=1)和输入描述:第一行一个整数n(1<=n<=5000),然后依次输入n个整数(每个整数范围[-5000, 5000])输出描述:输出一个整数表示最大子数组和(采用暴力枚举法,分治法和动态规划以后补充)暴力枚举法:#include #include using namespace std原创 2017-07-08 15:13:57 · 421 阅读 · 0 评论 -
[LintCode]56.两数之和
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。 注意事项你可以假设只有一组答案。样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2]原创 2017-08-19 20:22:43 · 262 阅读 · 0 评论 -
[LintCode]100.删除排序数组中的重复数字
给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。样例给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。思路:对数组遍历一次,并设置一个计数器,每当遍历前后元素不相同,计数器加1,并将当前遍历的元素覆盖到计数器对应在数组中位置。遍历完后,原创 2017-09-14 12:05:41 · 867 阅读 · 0 评论 -
[LintCode]172.删除元素
给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。元素的顺序可以改变,并且对新的数组不会有影响。样例给出一个数组 [0,4,4,0,0,2,4,4],和值 4返回 4 并且4个元素的新数组为[0,0,0,2]思路:类似上一题100class Solution {public: /** *@param A: A l原创 2017-09-14 12:14:12 · 358 阅读 · 0 评论 -
[LintCode]407.加一
给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。该数字按照大小进行排列,最大的数在列表的最前面。样例给定 [1,2,3] 表示 123, 返回 [1,2,4].给定 [9,9,9] 表示 999, 返回 [1,0,0,0].class Solution {public: /* * @param digits: a number原创 2017-09-14 13:04:50 · 262 阅读 · 0 评论 -
有序数组合并
有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。请编写一个方法,将B合并入A并排序。给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组。class Merge {public: int* mergeAB(int* A, int* B, int n, int m) {原创 2017-08-29 17:03:02 · 260 阅读 · 0 评论 -
三色排序
有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序。给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组。保证数组大小小于等于500。测试样例:[0,1,1,0,2,2],6返回:[0,0,1,1,2,2]思路:与快排划分过程相似class ThreeColor {public: vect原创 2017-08-29 17:23:16 · 370 阅读 · 0 评论 -
[LintCode]28.搜索二维矩阵
写出一个高效的算法来搜索 m × n矩阵中的值。这个矩阵具有以下特性:每行中的整数从左到右是排序的。 每行的第一个数大于上一行的最后一个整数。样例考虑下列矩阵:[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]给出原创 2017-08-29 17:37:22 · 1472 阅读 · 0 评论 -
最短子数组
对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。测试样例:[1,4,6,5,9,10],6返回:2class Subsequence {public: int shortes原创 2017-08-29 17:54:20 · 231 阅读 · 0 评论 -
[LintCode]82.落单的数
给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例给出 [1,2,2,1,3,4,3],返回 4异或运算:首先异或表示当两个数的二进制表示,进行异或运算时,当前位的两个二进制表示不同则为1相同则为0.该方法被广泛推广用来统计一个数的1的位数!参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。原创 2017-08-19 20:05:26 · 666 阅读 · 0 评论 -
[LintCode]3.统计数字
计算数字k在0到n中的出现的次数,k可能是0~9的一个值样例例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)思路:找出0~N中每个数字的每一位,与k进行比较,若相等则加1。使用%取模来实现取位,用/10来实现进位,依次从0-n进行遍历即可。class So原创 2017-08-19 18:57:44 · 370 阅读 · 0 评论 -
[LintCode]5.第k大元素
在数组中找到第k大的元素 注意事项你可以交换数组中的元素的位置样例给出数组 [9,3,2,4,8],第三大的元素是 4给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推思路:基于快速排序,找到一个轴点,左边的比他大,右边的比他小class Solution {public:原创 2017-08-19 18:26:48 · 474 阅读 · 0 评论 -
[LintCode]38.搜索二维矩阵 II
写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。这个矩阵具有以下特性:每行中的整数从左到右是排序的。每一列的整数从上到下是排序的。在每一行或每一列中没有重复的整数。样例:考虑下列矩阵:[ [1, 3, 5, 7], [2, 4, 7, 8], [3, 5, 9, 10]]给出target = 3,返回原创 2017-08-05 16:47:46 · 282 阅读 · 0 评论 -
[LintCode]373.奇偶分割数组
分割一个整数数组,使得奇数在前偶数在后。样例给定 [1, 2, 3, 4],返回 [1, 3, 2, 4]。思路一:时间复杂度为O(n^2)的解法:最简单的思路是,从头扫描数组,每碰到一个偶数,就拿出这个数字,并把位于这个数字之后的所有数字都往前挪动一位,挪完之后在数组的末尾有一个空位,把这个偶数放到这个空位。 思路二: 时间复杂度是O(n)的解法:用一头一尾的双指针方原创 2017-08-10 12:55:17 · 273 阅读 · 0 评论 -
[LintCode]374.螺旋矩阵
给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。样例给定如下矩阵:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]应返回 [1,2,3,6,9,8,7,4,5]。下面的矩阵处理方式,不仅可用于这道题,还适合很多其他的面试题就是矩阵分圈处理。printEdge方法是转原创 2017-08-18 02:58:25 · 680 阅读 · 0 评论 -
[LintCode]46.主元素
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。样例给出数组[1,1,1,1,2,2,2],返回 1思路:把这些数看做两种类型,一种主元素,一种非主元素;如果每次我们都从这两种类型中各拿走一个数,直到其中一种类型的数拿光,则最后,剩下的一种类型必定会是主元素类型。记录两个量,当前元素result,计数count。初始化count为0;然原创 2017-08-18 11:53:53 · 562 阅读 · 0 评论 -
[LintCode]41.最大子数组
给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。样例给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6思路:将子串和为负数的子串丢掉,只留和为正的子串。如果nums中有正数,从左到右遍历nums,用变量cur记录每一步的累加和,遍历到正数cur增加,遍历到负数cur减少。当cur>=0时,每一次累原创 2017-08-18 12:26:32 · 1338 阅读 · 0 评论 -
[LintCode]381.螺旋矩阵 II
给你一个数n生成一个包含1-n^2的螺旋形矩阵样例n = 3矩阵为[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]这题的解题思路和第54题(Spiral Matrix 螺旋矩阵 )是相似的,这两题可以结合一起做的。 思路:一次循环如下:把数组的第一行从左到后赋值递增的数(1,2,…),然后再把数组最后一列从原创 2017-08-18 16:05:10 · 197 阅读 · 0 评论 -
[LintCode]532.逆序对
在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。给你一个数组,求出这个数组中逆序对的总数。概括:如果a[i] > a[j] 且 i 样例序列 [2, 4, 1, 3, 5] 中,有 3 个逆序对 (2, 1), (4, 1), (4, 3),则返回 3 。思路:利用归并排序,可以求出逆序对class Solution {p原创 2017-08-18 18:24:33 · 351 阅读 · 0 评论 -
[LintCode]379.将数组重新排序以构造最小值
给定一个整数数组,请将其重新排序,以构造最小值。 注意事项The result may be very large, so you need to return a string instead of an integer.样例给定 [3, 32, 321],通过将数组重新排序,可构造 6 个可能性数字:3+32+321=3323213+321+3原创 2017-08-19 17:02:17 · 458 阅读 · 0 评论 -
[LintCode]39.恢复旋转排序数组
给定一个旋转排序数组,在原地恢复其排序。说明什么是旋转数组?比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]样例[4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5]思路:三步翻转法:以{4,5,6,7,1,2,3}为例1原创 2017-09-29 23:25:48 · 288 阅读 · 0 评论