八月集训第1天解题报告

宇宙大爆炸 2022-08-01 22:23:41

补一下前面的题目

2319. 判断矩阵是否是一个 X 矩阵

bool checkXMatrix(int** grid, int gridSize, int* gridColSize){
    int n = gridSize;
    int flag = 0;
    for(int i = 0; i < n; ++i){
        if(!grid[i][i] || !grid[i][n - 1 - i]){
            flag = 1;
            break;
        }
        for(int j = 0; j < n; ++j){
            if(j != i && j != n - 1 - i){
                if(grid[i][j]){
                    flag = 1;
                    break;
                }
            }
        }
        if(flag) break;
    }
    return !flag;
}

 

599. 两个列表的最小索引总和

暴力法

char ** findRestaurant(char ** list1, int list1Size, char ** list2, int list2Size, int* returnSize)
{
    int min = INT_MAX;
    char **returnStrs = (char **)malloc(sizeof(char *) *(list1Size + list2Size));
    for(int i = 0; i < list1Size; ++i){
        for(int j = 0; j < list2Size; ++j){ 
            if(strcmp(list1[i], list2[j]) == 0){
                if(i + j < min){
                    min = i + j;
                    *returnSize = 0;
                    returnStrs[*returnSize]  = list1[i];
                    *returnSize = *returnSize + 1;
                }
                else if((i + j) == min){
                    returnStrs[*returnSize]  = list1[i];
                    *returnSize = *returnSize + 1;
                }
            }     
        }
    }
    return returnStrs;
}

 

674. 最长连续递增序列

双指针

int findLengthOfLCIS(int* nums, int numsSize){
    int l = 0, r = 0;
    int max = 1, flag = 1;
    while(l < numsSize - 1){
        r = l;
        while(r < numsSize - 1 && nums[r] < nums[r + 1]) ++r;
        max = fmax(r - l + 1, max);
        l = r + 1;
    }
    return max;
}

 

989. 数组形式的整数加法

注意本身数组长度有限,需要新开数组操作

int* addToArrayForm(int* num, int numSize, int k, int* returnSize){
    int* ret = (int*)malloc(sizeof(int) * 10001);
    for(int i = 0; i < numSize; ++i){
        ret[i] = num[i];
    }
    ret[numSize - 1] += k;
    for(int i = numSize - 1; i > 0; --i){
        if(ret[i] >= 10){
            ret[i - 1] += ret[i] / 10;
            ret[i] %= 10;
        }
    }
    *returnSize = numSize;
    while(ret[0] >= 10){
        for(int i = *returnSize - 1; i >= 0; --i){
            ret[i + 1] = ret[i];
        }
        ret[0] = ret[1] / 10;
        ret[1] %= 10;
        ++*returnSize;
    }
    return ret;
}

 

...全文
26 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
发帖
万人千题

6.2w+

社区成员

学习「 算法 」的捷径就是 「 题海战略 」,社区由「 夜深人静写算法 」作者创建,三年ACM经验,校集训队队长,亚洲区域赛金牌,世界总决赛选手。社区提供系统的训练,答疑解惑,面试经验,大厂内推等机会
社区管理员
  • 英雄哪里出来
  • Amy卜bo皮
  • Risso
加入社区
帖子事件
创建了帖子
2022-08-01 22:23
社区公告

QQ群:480072171

英雄算法交流 8 群