力扣(LeetCode)刷题,简单题(第4期)

简介: 力扣(LeetCode)刷题,简单题(第4期)

目录

第1题:只出现一次的数字


第2题:两数之和


第3题:Excel表列名称


第4题:数组中重复的数字


第5题:二维数组中的查找


第6题:替换空格


第7题:从头到尾打印链表


第8题:斐波拉契数列


第9题:青蛙跳台阶问题


第10题:旋转数组的最小数


力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。


第1题:只出现一次的数字

试题要求如下:


image.png


回答(C语言):


//按位异或,相同的数异或为0,任何数与0异或为原数不变
int singleNumber(int* nums, int numsSize){
    int a = 0;
    for(int i = 0;i < numsSize ;i++){
        a ^= nums[i];
    }
    return a;
}

第2题:两数之和

试题要求如下:


image.png


回答(C语言):


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numbersSize, int target, int* returnSize){
    int *res = malloc(sizeof(int) * 2);
    *returnSize = 2;
    int i = 0;
    int j = numbersSize - 1;
    while(true){
        if (nums[i] + nums[j] > target) {
            j--;
        } else if (nums[i] + nums[j] < target) {
            i++;
        } else{
            res[0] = i+1;
            res[1] = j+1;
            break;
        }
    }
    return res;
}

第3题:Excel表列名称

试题要求如下:


image.png


回答(C语言):


char * convertToTitle(int n){
    int len = 0, tmp = n;
    while (tmp){
        len++;
        tmp = (tmp - 1) / 26;
    }
    char *res = (char*)malloc(len + 1);
    tmp = n;
    res[len] = 0;
    while (len--){
        res[len] = (tmp - 1) % 26 + 'A';
        tmp = (tmp - 1) / 26;
    }
    return res;
}

第4题:数组中重复的数字

试题要求如下:


image.png


回答(C语言):


int comp(const void *a, const void *b) {
    return *(int *)a < *(int *)b; //从小到大排序
}
int findRepeatNumber(int* nums, int numsSize){
    qsort(nums, numsSize, sizeof(int), comp);
    for (int i = 0; i < numsSize-1; i++) {
        if (nums[i] == nums[i+1])
            return nums[i];
    }
    return -1;
}

第5题:二维数组中的查找

试题要求如下:


image.png


回答(C语言):

bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){
    if(matrix==NULL || matrixSize==0 || matrixColSize[0]==NULL) 
        return false;
    for(int i=0;i<matrixSize;i++){
        for(int j=0;j<matrixColSize[0];j++){
            if(matrix[i][j]==target)
                return true;
        }
    }
    return false;
}

第6题:替换空格

试题要求如下:


image.png


回答(C语言):


char* replaceSpace(char* s){
    int i=0,cou=0,len_s=strlen(s);
    while(i<len_s){
        if(s[i]==' '){
            cou++;
        }
        i++;
    }
    char* buf_str=(char*)malloc(sizeof(char)*(len_s+(cou*2)+1));
    int j=0;
    i=0;
    while(i<len_s){
        if(s[i]==' '){
            buf_str[j++]='%';
            buf_str[j++]='2';
            buf_str[j]='0';
        }
        else{
            buf_str[j]=s[i];
        }
        i++;
        j++;
    }
    buf_str[j]='\0';
    return buf_str;
}

第7题:从头到尾打印链表

试题要求如下:


image.png


回答(C语言):


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* reversePrint(struct ListNode* head, int* returnSize){
    struct ListNode *p=head,*q=head;
    returnSize[0]=0;
    while(p!=NULL){
        returnSize[0]++;
        p=p->next;
    }
    int *buf_data=(int *)malloc(sizeof(int)*(returnSize[0]));
    int len=returnSize[0];
    while(q!=NULL){
        buf_data[--len]=q->val;
        q=q->next;
    }
    return buf_data;
}

第8题:斐波拉契数列

试题要求如下:


image.png


回答(C语言):


int fib(int n){
    int a=0,b=1,c=0;
    if(n==0){
        return a;
    }
    if(n==1){
        return b;
    }
    for(int i=2;i<=n;i++){
        c=a+b;
        if (c > 1000000007) 
            c %= 1000000007;
        a=b;
        b=c; 
    }
    return c;
}

第9题:青蛙跳台阶问题

试题要求如下:


image.png


回答(C语言):


int numWays(int n){
    int a=1,b=1,c=0;
    if(n==0){
        return a;
    }
    if(n==1){
        return b;
    }
    for(int i=2;i<=n;i++){
        c=a+b;
        if (c > 1000000007) 
            c %= 1000000007;
        a=b;
        b=c; 
    }
    return c;
}

第10题:旋转数组的最小数

试题要求如下:


image.png


回答(C语言):


int minArray(int* numbers, int numbersSize){
    int cou=numbersSize-1;
    while(cou-1>=0){
        if(numbers[cou-1]>numbers[cou]){
            break;
        }
        cou--;
    }
    return numbers[cou];
}

文章知识点与官方知识档案匹配,可进一步学习相关知识

算法技能树leetcode-动态规划22-括号生成806 人正在系统学习中


相关文章
|
5天前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
2月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
82 2
|
5天前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
2月前
|
算法 Python
【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
本文介绍了LeetCode 2038题的解法,题目要求在一个由'A'和'B'组成的字符串中,按照特定规则轮流删除颜色片段,判断Alice是否能够获胜,并提供了Python的实现代码。
39 3
|
2月前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
17 3
|
2月前
|
Python
【Leetcode刷题Python】50. Pow(x, n)
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
18 1
|
2月前
|
Python
【Leetcode刷题Python】LeetCode 478. 在圆内随机生成点
本文介绍了LeetCode 478题的解法,题目要求在给定圆的半径和圆心位置的情况下实现在圆内均匀随机生成点的功能,并提供了Python的实现代码。
20 1
|
2月前
|
算法 Python
【Leetcode刷题Python】295. 数据流的中位数
本文介绍了一种使用Python实现的数据结构,用以支持数据流中添加整数并返回当前所有元素的中位数,通过排序列表来计算中位数。
16 1
|
2月前
|
算法 Python
【Leetcode刷题Python】73. 矩阵置零
本文介绍了LeetCode第73题的解法,题目要求在给定矩阵中将所有值为0的元素所在的行和列全部置为0,并提供了一种原地算法的Python实现。
19 0
【Leetcode刷题Python】73. 矩阵置零
|
2月前
|
Python
【Leetcode刷题Python】1467. 两个盒子中球的颜色数相同的概率
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
24 0