leetcode—数组(easy) 2/26

1.找到所有数组中消失的数字

给定一个范围在1~n(n为数组大小)的整形数组,数组中的元素一些出现了两次,另一些只出现了一次。
找到所有在[1,n]范围之间没有出现在数组中的数字。

思路 :依次遍历数组中的每一个数字,将出现的数字所对应的下标置为负数,如果该位上的数字依旧为正,则该数字消失。

2.数组中的K-diff数对

给定一个整数数组和一个整数k,在数组里找到不同的k-diff数对。将k-diff数对定义为一个整数对(i,j),其中i和j都是数组中的数字,且两数之差的绝对值是 k。

思路:利用hashmap统计出现的次数,分成k小于零,等于零,大于零三种情况。

3.最大连续1的个数

给定一个二进制数组,计算其中最大连续1的个数

思路:遍历一遍数组,记录当前连续1的个数,最大连续1的个数

4.数组拆分I

给定长度为2n的数组,将这些数分成n对,使得每一对最小值的总和最大

思路:先排序,隔2相加

5.重塑矩阵

给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。如果操作可行且合理,则输出新的重塑矩阵,否则输出原始矩阵。

思路:遍历,存储(根据在两个矩阵行列数的位置计算整体位置)

6.最短无序连续子数组

给定一个整数数组,寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。输出最短子数组长度。

思路:从左向右遍历,如果该数小于前面的最大数字 ,则该数左边需要调整。从右向左遍历,如果该数大于后面的最小数字,则该数的右边需要调整。

7.种花问题

假设有一个很长的花坛,一部分地块种植了花,另一部分没有。花卉不能种植在相邻的地块上。数组中0表示没有种植,1表示种植。给定整数n,能否种植n朵花?能返回true,不能返回false。

思路:两个1之间连续奇数个零能种(奇数/2)朵,偶数个零能种(偶数-1/2)朵。首尾连续的零单独讨论

8.三个数的最大乘积

给定一个整形数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

思路:先排序,分两负一正和三正两种情况

9.子数组最大平均数I

给定n个整数,找出平均数最大且长度为k的连续子数组,并输出该最大平均数。

思路:动态规划的思想,类似于滑动窗口

10.图片平滑器

包含整数的二维矩阵M表示一个图片的灰度。将每一个单元的灰度成为平均灰度(向下舍入),平均灰度为周围的8个单元和它本身的平均。

思路:巧妙之处在于内部循环

int sum = 0;
int count = 0;
for(int x = max(0,i-1); x <= min(rows-1, i+1); x++)
{
	for(int y = max(0, j-1); y < = min(cols-1, j+1); y++)
	{
		sum += M[x][y];
		count++;
	}
}
res[i][j] = sum / count; 

猜你喜欢

转载自blog.csdn.net/qq_40769893/article/details/87931091