博客
关于我
【Leecode笔记之C语言】第五周(10.5-10.11)
阅读量:354 次
发布时间:2019-03-04

本文共 3275 字,大约阅读时间需要 10 分钟。

解压缩编码列表

分析:奇数位的数字用来判断重复数量,偶数位的数字用来作为重复数字;然后还要连接各个子列表。

难点在于,1.如何将多个子数组串联在一起?(控制频次和遍历原数组可以用双层for循环完成。用python应该会简单多了,用V有点麻烦。)2.如何确定目标数组的长度?

解决:首先确定目标数组的长度,就是两步,原数组的偶数位,偶数位的值控制频次。

int* decompressRLElist(int* nums, int numsSize, int* returnSize) {    *returnSize = 0;    int len = numsSize / 2;    for (int i = 0; i < len; i++) {        *returnSize += nums[2 * i];    }    int index = 0;    int *ret = (int *)calloc(*returnSize, sizeof(int));    for (int k = 0; k < numsSize; k += 2) {        for (int j = 0; j < nums[k]; j++) {            ret[index++] = nums[k + 1];        }    }    return ret;}

第一题:将数字变成0的操作次数

分析:思路挺简单的,只要num不为0,如果是奇数就-1,如果是偶数就/2,然后定义一个计数器统计次数即可。

int numberOfSteps(int num) {    int count = 0;    while (num != 0) {        if (num % 2 == 0) {            num /= 2;        } else {            num -= 1;        }        count++;    }    return count;}

第二题:有多少小于当前数字的数字

分析:这题思路也挺简单的,首先第一层for循环控制顺序遍历,然后将比较结果放置到返回数组中,第二层for循环控制遍历比较。

int* smallerNumbersThanCurrent(int* nums, int numsSize, int* returnSize) {    int* retArr = (int *)malloc((sizeof(int)) * numsSize);    for (int i = 0; i < numsSize; i++) {        int count = 0;        for (int j = 0; j < numsSize; j++) {            if ((i != j) && (nums[j] < nums[i])) {                count++;            }        }        retArr[i] = count;    }    *returnSize = numsSize;    return retArr;}

访问所有点的最小时间

分析:这题目让我想起了以前本科做的五子棋项目。假如说目标点的横坐标相同,或者纵坐标相同,那么就可以选择直走,假如都不同,那就斜着走,走对角线。(感觉用java写会容易一点)

解决:利用切比雪夫距离,二维数组来计算两点之间横坐标和纵坐标的差。

int minTimeToVisitAllPoints(int** points, int pointsSize, int* pointsColSize) {    int i, time = 0, dx, dy;    for (i = 1; i < pointsSize; i++) {        dx = abs(points[i][0] - points[i - 1][0]);        dy = abs(points[i][1] - points[i - 1][1]);        if (dx < dy) {            time += dy;        } else {            time += dx;        }    }    return time;}

第二题:统计位数为偶数的数字

分析:思路挺简单,就是将数组中的每一位不断除以10(直到为0)统计次数,然后用一个计数器来存放操作次数为奇数的个数。(为什么是奇数,是因为最后一位没有算进除以10的操作次数里)

int findNumbers(int* nums, int numsSize) {    int num;    int total = 0;    for (int i = 0; i < numsSize; i++) {        num = 0;        while (nums[i] != 0) {            nums[i] /= 10;            num++;        }        if (num % 2 == 0) {            total++;        }    }    return total;}

矩阵对角线元素的和

分析:要计算特定位置的元素和的话,那么就必须要找到这些位置的元素的相似性。首先,主对角线上的元素共同点是,横坐标和纵坐标是一样的,副对角线上的元素共同点是,横坐标和纵坐标相加等于方阵的最大列号(或者行号)。最后,既在主对角线上又在副对角线上的元素只能算一次,也就是说同时满足上边两点。

int diagonalSum(int** mat, int matSize, int* matColSize) {    int sum = 0;    int common = 0;    for (int i = 0; i < matColSize; i++) {        for (int j = 0; j < matColSize; j++) {            if ((i == j) || (i + j == matColSize)) {                sum += mat[i][j];            }            if (i == j && (i + j == matColSize)) {                common = mat[i][j];            }        }    }    return (sum - common);}

速算机器人

分析:首先就是要解析S,将其中的字符判断是啥,然后进行相应的判断。但能发现,当字符是A时,x+y=2x+y;当字符是B时,x+y=x+2y,x+y+y=2(x+y);所以,无论字符是A还是B,结果都一样,因此只需要判断S有多长,然后乘以2即可。

class Solution {    public int calculate(String s) {        int x = 1;        int y = 0;        for (int i = 0; i < s.length(); i++) {            if (s.charAt(i) == 'A') {                x = 2 * x + y;            }            if (s.charAt(i) == 'B') {                y = 2 * y + x;            }        }        return x + y;    }}

转载地址:http://godh.baihongyu.com/

你可能感兴趣的文章
Objective-C实现sobel filter索贝尔过滤器算法(附完整源码)
查看>>
Objective-C实现Sobel算子(附完整源码)
查看>>
Objective-C实现Sobel算子(附完整源码)
查看>>
Objective-C实现sobel边缘检测算法(附完整源码)
查看>>
Objective-C实现sock merchant袜子商人问题算法(附完整源码)
查看>>
Objective-C实现softmax函数功能(附完整源码)
查看>>
Objective-C实现stooge sort臭皮匠排序算法(附完整源码)
查看>>
Objective-C实现strand sor链排序排序算法(附完整源码)
查看>>
Objective-C实现strassen matrix multiplication施特拉森矩阵乘法算法(附完整源码)
查看>>
Objective-C实现StringSearch字符串搜索算法(附完整源码)
查看>>
Objective-C实现strncmp函数功能(附完整源码)
查看>>
Objective-C实现strncpy函数功能(附完整源码)
查看>>
Objective-C实现strongly Connected Components 强连通分量算法(附完整源码)
查看>>
Objective-C实现strongly connected components强连通分量算法(附完整源码)
查看>>
Objective-C实现strschr函数功能(附完整源码)
查看>>
Objective-C实现strsep函数功能(附完整源码)
查看>>
Objective-C实现subset generation子集生成算法(附完整源码)
查看>>
Objective-C实现substring函数功能(附完整源码)
查看>>
Objective-C实现SudokuSolver数独解决方案算法(附完整源码)
查看>>
Objective-C实现Sudoku数独游戏算法(附完整源码)
查看>>