Leetcode -598.范围求和Ⅱ
题目:给你一个 m x n 的矩阵 M ,初始化时所有的 0 和一个操作数组 op ,其中 ops[i] = [ai, bi] 意味着当所有的 0 <= x < ai 和 0 <= y < bi 时, M[x][y] 应该加 1。
在 执行完所有操作后 ,计算并返回 矩阵中最大整数的个数 。
示例 1: 输入: m = 3, n = 3,ops = [[2, 2], [3, 3]] 输出 : 4 解释 : M 中最大的整数是 2, 而且 M 中有4个值为2的元素。因此返回 4。
示例 2 : 输入 : m = 3, n = 3, ops = [[2, 2], [3, 3], [3, 3], [3, 3], [2, 2], [3, 3], [3, 3], [3, 3], [2, 2], [3, 3], [3, 3], [3, 3]] 输出 : 4
示例 3 : 输入 : m = 3, n = 3, ops = [] 输出 : 9
思路是每次只需要判断最小的行和列,因为只是返回它们的个数,所以只需要行和列就够了;
代码语言:javascript复制 int maxCount(int m, int n, int** ops, int opsSize, int* opsColSize)
{
int minrow = m, mincol = n;
for (int i = 0; i < opsSize; i )
{
//判断最小行和最小列
//因为只是返回它们的个数,所以只需要行和列就够了
minrow = fmin(ops[i][0], minrow);
mincol = fmin(ops[i][1], mincol);
}
return minrow * mincol;
}
Leetcode -599.两个列表的最小索引总和
题目:假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。
你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。
示例 1: 输入: list1 = [“Shogun”, “Tapioca Express”, “Burger King”, “KFC”],list2 = [“Piatti”, “The Grill at Torrey Pines”, “Hungry Hunter Steakhouse”, “Shogun”] 输出 : [“Shogun”] 解释 : 他们唯一共同喜爱的餐厅是“Shogun”。
示例 2 : 输入 : list1 = [“Shogun”, “Tapioca Express”, “Burger King”, “KFC”],list2 = [“KFC”, “Shogun”, “Burger King”] 输出 : [“Shogun”] 解释 : 他们共同喜爱且具有最小索引和的餐厅是“Shogun”,它有最小的索引和1(0 1)。
提示 : 1 <= list1.length, list2.length <= 1000 1 <= list1[i].length, list2[i].length <= 30 list1[i] 和 list2[i] 由空格 ’ ’ 和英文字母组成。 list1 的所有字符串都是 唯一 的。 list2 中的所有字符串都是 唯一 的。
思路是在一个数组中的餐厅寻找另外一个数组中相同的餐厅,并用 i 和 j 作为它们的索引,判断它们的索引是否是最小,因为在此次 i 的遍历中,j 只会越来越大,所以第一次出现相同的餐厅的时候,它们的索引就是最小的;但是可能还会有相同的最小的索引的情况,所以下一次判断索引的时候,等于最小索引的时候,也要放入返回数组中;
代码语言:javascript复制 char** findRestaurant(char** list1, int list1Size, char** list2, int list2Size, int* returnSize)
{
//开辟返回的数组指针,开辟1000个是因为两个数组的长度最长是1000
char** ret = (char**)malloc(sizeof(char*) * 1000);
//提前开辟好二级指针中的一级指针的空间大小,因为1 <= list1[i].length, list2[i].length <= 30,加上'