博客
关于我
【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/

你可能感兴趣的文章
opencv图像分割2-GMM
查看>>
OpenCV(1)读写图像
查看>>
OpenCV:概念、历史、应用场景示例、核心模块、安装配置
查看>>
Openlayers图文版实战,vue项目从0到1做基础配置
查看>>
Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
查看>>
Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
查看>>
Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
查看>>
Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
查看>>
openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
查看>>
OpenMCU(一):STM32F407 FreeRTOS移植
查看>>
OpenMCU(二):GD32E23xx FreeRTOS移植
查看>>
OpenMMLab | S4模型详解:应对长序列建模的有效方法
查看>>
OpenMMLab | 【全网首发】Llama 3 微调项目实践与教程(XTuner 版)
查看>>
OpenMMLab | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
查看>>
OpenObserve云原生可观测平台本地Docker部署与远程访问实战教程
查看>>
OpenPPL PPQ量化(4):计算图的切分和调度 源码剖析
查看>>
OpenPPL PPQ量化(5):执行引擎 源码剖析
查看>>
openpyxl 模块的使用
查看>>
Openresty框架入门详解
查看>>
OpenResty(2):OpenResty开发环境搭建
查看>>