数组
文章平均质量分 54
wnjason
这个作者很懒,什么都没留下…
展开
-
LeetCode Remove Duplicates from Sorted Array
题目大意:给出一个排过序的数组,要求不是用额外的数组空间去除数组中重复的元素,最后返回数组的新长度,并且数组是整理后的。算法思想:用一个游标记录新数组的末端,然后用一个中间变量不断比较相邻的两个元素,相同时继续执行,不同时则将不同的元素赋值给中间变量,然后放置到新数组,游标后移。最后返回扫描完整个数组后的游标值(既数组的长度)。代码如下:class Solution {public:原创 2015-03-16 15:36:18 · 353 阅读 · 0 评论 -
LeetCode---Pascal's Triangle II
题目大意:给出帕斯卡三角的行号索引,计算出该行的结果。算法思想:1.整体思想如LeetCode---Pascal's Triangle2.只需将上述算法中的行数替换为对应的行索引号即可。代码如下:class Solution {public: vector getRow(int rowIndex) { vector tmp,pretmp;原创 2015-11-09 14:05:54 · 287 阅读 · 0 评论 -
LeetCode---Majority Element II
题目大意:给出一个数组,找出数组中元素出现次数大于数组1/3规模的元素,要求算法运行时间在线性时间内,空间复杂度为O(1);算法思想:1.首先对数组排序。2.利用upper_bound()算法找出出现次数大于数组规模1/3的元素。代码如下:class Solution {public: vector majorityElement(vector& nums) {原创 2015-11-09 20:35:18 · 250 阅读 · 0 评论 -
LeetCode---Move Zeroes
题目大意:给出一个数组,将数组中的0移至数组末尾,操作过程中不改变运算的相对顺序。算法思想:设置一个游标k,从零开始,然后扫描数组,如果元素不是0则将其移动到游标所指向的位置,游标值+1,如国元素是0则跳过;当所有元素扫描完后,将数组末尾用0补齐。代码如下:class Solution {public: void moveZeroes(vector& nums) {原创 2015-09-21 16:13:28 · 319 阅读 · 0 评论 -
LeetCode---Search for a Range
题目大意:给出一个已排序的数组和一个目标数值,寻找该数值在数组中的起点和终点。如果不存在则返回(-1,-1).时间复杂度为logn算法思想:1.如果数组长度为0则直接返回(-1,-1)2.利用STL中的equal_range()算法二分搜索出目标值的区间。3.判断是否存在目标区间如果不存在则返回(-1,-1),若存在则计算出区间起点和终点。4.返回区间。代码如下:cla原创 2015-10-26 18:45:24 · 276 阅读 · 0 评论 -
LeetCode---Spiral Matrix II
class Solution {public: vector> generateMatrix(int n) { int a[n+2][n+2]; memset(a,0,sizeof(a)); for(int i=0;i<n+2;i++){ a[0][i]=1; a[i][0]=1; a[n+1][i]=1; a[i][n+1]=1; }原创 2015-10-27 17:16:00 · 334 阅读 · 0 评论 -
LeetCode---Spiral Matrix
题目大意:给出一个m*n的二维向量,按螺旋形方式读取向量中的元素,并存储在一维向量中,最后返回该一维向量。算法思想:1.获取m 和 n 的大小,如果有值为0 则直接返回空向量。2.设置两个数组a[m+2][n+2] flag[m+2][n+2],一个用来存储二维向量中的元素,一个用来标记相应位置的元素是否已被读取。3.按顺时针方向读取数组中的元素并存储到一维向量中。(每当遇到边界时原创 2015-10-27 19:25:03 · 282 阅读 · 0 评论 -
LeetCode---Merge Sorted Array
题目大意:给出两个已排序的数组其中元素个数分别为m和n,将两个数组中m+n个元素合并到数组1中。算法思想:1.新申请一个容器存放数组1中的元素。2.清空数组1。3.遍历两个数组,按递增的顺序将元素合并与数组1中。注意循环的条件为每个数组已合并的元素个数不等于m,n。4.将未符合条件的元素合并到数组中。代码如下:class Solution {public: v原创 2015-10-26 22:04:02 · 292 阅读 · 0 评论 -
LeetCode---Contains Duplicate
题目大意:给出一个数组,判断数组中是否有重复元素,如果有返回真,否则返回假。算法思想:1.强数组元素排序。2.设置两个迭代器,比较相邻的两个元素,如果相同返回真,否则移动两个迭代器继续比较。3.当数组遍历完后,返回假。代码如下:class Solution {public: bool containsDuplicate(vector& nums) {原创 2015-09-23 20:44:18 · 306 阅读 · 0 评论 -
LeetCode---Rotate Array
题目大意:给出一个数组和一个数K,要求向右旋转数组k个位置,返回修改后的数组。算法思想:1.获取数组的大小n,如果数组为空直接返回。2,设置一个大小为n缓冲数组,用来记录数组旋转后的结果。3.利用STL中的rotate_copy算法将旋转后的结果放置在缓冲数组中。4.将缓冲数组中的结果,赋值到原数组对应的位置。代码如下:class Solution {public:原创 2015-10-27 20:43:35 · 320 阅读 · 0 评论 -
leetCode---Single Number III
题目大意:给出一个数组,数组中绝对有两个元素只出现过一次,其他的元素都出现过两次,找出这两个出现过一次的元素。算法思想:1.利用map容器对数组中的元素计数。2.找出个数为1的元素。代码如下:class Solution {public: vector singleNumber(vector& nums) { map numIndex;原创 2015-09-24 01:59:04 · 308 阅读 · 0 评论 -
LeetCode---Two Sum
题目大意:给出一个数组和一个目标数字,从数组中找出两个元素之和等于目标数字,最后返回这两个元素的索引。索引1必须小于索引2算法思想:遍历数组将数组中的元素和索引存入multimap中,然后再次遍历数组,判断target-nums[i]是否在map中,如果在则判断该索引是否和nums[i]的索引相同,如果不相同则返回这两个数的索引,反之继续遍历数组。代码如下:class Soluti原创 2015-09-26 10:32:31 · 266 阅读 · 0 评论 -
LeetCode---Convert Sorted Array to Binary Search Tree
题目大意:给出一个排序的数组,将其转化为高度平衡的二叉树。算法思想:1.将数组分成3部分,中间位置是二叉树的根节点,左半部分则是二叉树的左子树,右半部分则是二叉树的右子树。2.递归转化数组为二叉树。代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; *原创 2015-10-29 15:33:08 · 317 阅读 · 0 评论 -
LeetCode---Find Minimum in Rotated Sorted Array
题目大意:给出一个旋转的拍过序的数组,找出其中的最小元素。算法思想:直接遍历数组,找出最小的元素即可。代码如下:class Solution {public: int findMin(vector& nums) { if(nums.size()==0) return 0; vector::iterator pos; int Mi原创 2015-10-21 19:46:03 · 291 阅读 · 0 评论 -
LeetCode---Pascal's Triangle
题目大意:给出一个数,写出规模为这个数的帕斯卡三角形。算法思想:观察规律可知,没一行的首尾为1,其余元素为上一行前两个元素之和。按此规律没计算一行将其放入结果中,并用上一行的结果计算下一行的结果。代码如下:class Solution {public: vector > generate(int numRows) { vector > res;原创 2015-11-09 12:27:03 · 264 阅读 · 0 评论 -
LeetCode---Unique Paths II
题目大意:给出一个m*n的数组,数组中放置若干个障碍物,机器人从左上角到右下角有多少种路径?算法思想:1.如果m或n为0值的话,直接返回0.2.设置一个val表用来记录机器人从起点到当前位置的方法数,初始时表中元素都置为0。3.初始化val表的左边界和上边界。如果遇到障碍物则该位置及之后位置都为0,否则为1.4.遍历障碍物向量,填写val表。val[i][j]=val[i-1]原创 2015-10-22 21:09:48 · 333 阅读 · 0 评论 -
LeetCode Remove Duplicates from Sorted Array II
题目大意:给出一个排序后的数组,去除数组中的重复元素且最多允许有两个元素相同,最后返回处理后的数组长度,且数组是整理后的。算法思想:当数组长度小于3时不用整理数组,直接返回数组的长度;当数组长度大于等于3时,用pre记录前驱元素,flag标记是否重复一次,p记录新数组的末端坐标,然后扫描整个数组,相邻两个元素比较,如果相同且flag=0则将比较的元素放入到新数组中,flag=1,反之,如果量元原创 2015-03-17 21:16:12 · 547 阅读 · 0 评论 -
LeetCode---Single Number II
题目大意:给出一个数组,数组中的每个元素都出现3次,只有一个出现1次找出那个出现1次的元素。算法思想:1.对数组中的元素进行排序。2.遍历数组中的每个元素。 1>.当前元素与前驱元素相同的时候计数器+1,并且mod3; 2>.如果当前元素与前驱元素不相同的时候且计数器不为0, 则直接返回原创 2015-09-26 17:16:35 · 291 阅读 · 0 评论 -
LeetCode---Majority Element
题目大意:给出一个数组,大小为n,找出其中出现n/2次的元素。算法思想:利用一个map容器对数组中的每个元素进行计数,最后遍历map找出主要元素。代码如下:class Solution {public: int majorityElement(vector& nums) { vector::iterator pos; map intin原创 2015-09-25 11:39:54 · 256 阅读 · 0 评论 -
LeetCode---Search Insert Position
题目大意:给出一个已经排序的数组和一个目标元素,找出目标元素在数组中出现的位置,如果目标元素未在数组中出现则给出目标元素应该在数组中插入的位置。算法思想:遍历数组,对于数组中的每个元素进行判断,当其等于目标元素时返回该元素的索引;如果数组中没有目标元素则返回第一格大于目标元素的索引;如果没有元素大于目标元素则返回数组的末尾。代码如下:class Solution {publi原创 2015-09-26 11:22:27 · 256 阅读 · 0 评论 -
LeetCode---Maximum Subarray
题目大意:给出一个数组,求出该数组中的最大字段和。数组中的元素可能为正也可能为负。算法思想:a[j]表示数组中的元素,b[j]表示从0到j的子段和,他可能为b[j-1]+a[j],也可能为a[j]。则b[j]=max{b[j-1]+a[j],a[j]},遍历数组找出最大的b[j]即可。代码如下:class Solution {public: int maxSubArr原创 2015-09-28 15:12:28 · 275 阅读 · 0 评论 -
LeetCode---Missing Number
题目大意:给出一个数组,包含n个不同的元素,每个元素的取值范围为[0,n].找出该数组中遗漏的那个元素。算法思想:1.首先对数组排序。2.遍历数组比较元素值和其索引是否相同不相同则返回该索引。3.当数组遍历完后则返回n(此时数组遗漏了n)代码如下:class Solution {public: int missingNumber(vector& nums) {原创 2015-09-28 17:16:35 · 313 阅读 · 0 评论 -
LeetCode---Minimum Path Sum
题目大意:给出一个二维数组,数组中的每个元素非负。找出一条从左上角到右下角的最短路径。(每次只能向右或者向下走一格)算法思想:1.采用一个二维数组V记录从起点到当前位置的最短距离。2.遍历二维数组,填写数组V。V的值分3种情况 (1)当前位置处于上边界 V[i][j]=V[i][j-1]+grid[i][j] (2) 处于左边界V[i][j]=V原创 2015-10-19 20:45:38 · 449 阅读 · 0 评论 -
LeetCode---Triangle
题目大意:给出一个三角形数组,求出从顶部到底部的最小路径和。算法思想:1.采用一个2维数组记录从顶部到当前位置的最小路径和。(滚动数组的原理)2.遍历三角形数组,对于当前位置的最小路径和有3种情况。 (1)处于三角形的内部,则V[1][j]=min(V[0][j],V[1][j-1])+triangle[i][j]. (2) 处于三角形的左边界,则V[1原创 2015-10-19 22:18:31 · 344 阅读 · 0 评论 -
LeetCode---Search a 2D Matrix
题目大意:给出一个二维数组,数组中每一维的数从左到右一次递增,同时当每一维的首元素大于上一维的尾元素,判断数组中是否存在所给的目标数。算法思想:把二维数组看做是等分成了几段的一维数组,然后将其当成递增的一维数组进行二分搜索。1.计算出二维数组的行数和列数,从而计算出数组中元素的个数。2.为了方便计算中间元素行和列,这里搜索的左端初始为1,右端初始为数组中元素的个数。3.先计算中原创 2015-11-05 21:58:50 · 270 阅读 · 0 评论 -
LeetCode---Remove Element
题目大意:给出一个数组,和一个目标数值,删除数组中所有的目标数值。最后返回数组的长度。算法思想:1.采用算法remove移除素组中的元素,返回新的数组末尾迭代器。2.移除末尾到原数组的所有元素。代码如下:class Solution {public: int removeElement(vector& nums, int val) { vector::原创 2015-10-06 23:32:23 · 288 阅读 · 0 评论 -
LeetCode---Search a 2D Matrix II
题目大意:给出一个二维数组,判断目标数是否在数组中,数组中元素从左到右一次递增,从上到下一次递增。算法思想:1.计算出数组的行数和列数。2.将目标数和数组中右上角的元素比较,如果目标元素小于该数则说明该数所在列中的元素都大于目标数,应该缩小列数;如果目标数大于该数,则说明该数所在的行中所有的数都大于该数,应该增大行数;如果目标数等于该数,则说明目标数在数组中存在。代码如下:cl原创 2015-11-06 10:45:09 · 248 阅读 · 0 评论 -
LeetCode---Unique Paths
题目大意:给出一个mXn的网格,机器人处于左上角,终点在右下角。机器人每次只能向右或者向下移动一格。机器人到终点共有多少种走法?算法思想:1.如果当m或n为0时返回0,如果当m或n为1时返回1.2.设置一个mXn的数组用来记录从起点到当前位置共有多少种方法。3.初始化数组的上下边界。处于边界的位置只能有一种走法。3.填表。num[i][j]=num[i-1][j]+num[i]原创 2015-10-21 20:36:40 · 318 阅读 · 0 评论 -
LeetCode---Submission Details
题目大意:给出一个一维数组,该数组中每个元素的值都出现过两次只有一个元素值只出现一次,现在找出这个元素。要求在线性时间内完成,不适用额外的空间。算法思想:1.对数组排序2.遍历数组,比较相邻的两个元素值是否相同,若相同则比较下一组相邻元素,若不相同则返回该元素。注意迭代器的值每次递增2代码如下:class Solution {public: int singleNum原创 2015-09-18 16:35:37 · 525 阅读 · 0 评论 -
LeetCode---Contains Duplicate II
题目大意:给出一个数组,一个数K,判断该数组中是否存两个索引使得nums[i]==nums[j]且|i-j|算法思想:1.设置一个map容器,键值为数组中的元素值,实值为元素值对应的索引编号。2.遍历数组,将每个元素值插入map中,如果插入成功则说明没出现相等元素,如果插入失败则说明出现相同元素。此时判断索引之差是否小于等于K,若果满足条件返回true,否则更新索引值。3.遍历完数原创 2015-12-24 15:46:18 · 284 阅读 · 0 评论