0
点赞
收藏
分享

微信扫一扫

C语言之练习题

在这里插入图片描述

欢迎来到我的:世界

希望作者的文章对你有所帮助,有不足的地方还请指正,大家一起学习交流 !😊


目录

内容

第一题:加一

地址:oj地址

在这里插入图片描述

int* plusOne(int* digits, int digitsSize, int* returnSize) {
	//从个位开始遍历
    for (int i = digitsSize - 1; i >= 0; i--)
    {
    	//从个位+1,判断是否需要进位
        digits[i] = digits[i] + 1;
        //如果个位+1后不为10,则可以直接返回数组
        if (digits[i] != 10)
        {
            *returnSize = digitsSize;
            return digits;
        }
        else
            digits[i] = 0;//若为10,则可以把改为0
    }
    //开辟一块比原来空间+1的空间,题目要求必须malloc函数开辟,
    int* pa = (int*)malloc(sizeof(int) * (digitsSize + 1));
    //而malloc函数开辟的空间不会进行初始化,需要将空间所有元素赋值为0;
    memset(pa, 0, sizeof(int) * (digitsSize + 1));
    pa[0] = 1;//既然首元素做高位进位,则直接赋值最高位为1即可;
    *returnSize = digitsSize + 1;
    return pa;
}

第二题:移动零


地址:oj地址


在这里插入图片描述

void moveZeroes(int* nums, int numsSize) {
    // 计算数组中0的个数
    int count = 0;

    int i = 0;
    int j = 0;
    //即在整个数组中遍历
    while (j < numsSize) {
        //计算需要补零的个数
        if (nums[j] == 0) {
            count++;
        } 
        else {
            //遍历将不为0的数放置数组前方
            nums[i] = nums[j];
            i++;
        }
        j++;
    }
    //在后面补零
    while (count--) {
        nums[j - 1] = 0;
        j--;
    }
}
void moveZeroes(int* nums, int numsSize) {
    int i=0,j=0;
    //开始遍历
    while(j<numsSize)
    {
    	//当j位置不为0时,进行交换
        if(nums[j])
        {
            int tem=nums[i];
            nums[i]=nums[j];
            nums[j]=tem;
            i++;
        }
        //当j位置为0时,继续往前走,直到找到0
        j++;
    }
}

第三题 :分发饼干


地址:oj地址


在这里插入图片描述

int cmp(int* a, int* b) {
    return *a - *b;
}

int findContentChildren(int* g, int gSize, int* s, int sSize) {
	//进行排序
    qsort(g, gSize, sizeof(int), cmp);
    qsort(s, sSize, sizeof(int), cmp);
    int m = gSize, n = sSize;
    //记录满足小孩的个数
    int count = 0;
    //进入遍历
    for (int i = 0, j = 0; i < m && j < n; i++, j++) {
    	//找到能够满足最大胃口小孩的饼干
        while (j < n && g[i] > s[j]) {
            j++;
        }
        //找到后,要判断,下标不能超过数组;
        if (j < n) {
            count++;//找到了能匹配的饼干和小孩,在往后去寻找,直到某个数组遍历完
        }
    }
    return count;
}

第四题:买股票的最佳时机


地址:oj地址


在这里插入图片描述

int maxProfit(int* prices, int pricesSize) {
    int min = prices[0];//假设这就是最小价格数值
    int max = 0;//开始时设最大利润值为0
    for (int i = 0; i < pricesSize; i++) {
    	//遍历找那个最小的价格值
        if (min > prices[i])
            min = prices[i];
		//找出最大的利润值
        if (prices[i] - min > max)
            max = prices[i] - min;
    }
    //返回最大利润值
    return max;
}
int maxProfit(int* prices, int pricesSize)
{
   int max = 0;
   for (int i = 0; i < pricesSize-1; i++)
   {
       for (int j = i + 1; j < pricesSize; j++)
       {
           int ret = prices[j] - prices[i];//记录每次的利润,找出最大的利润
           if (ret > max)
           {
               max = ret;
           }
       }
   }
   return max;
}

第五题:丢失的数字


地址:oj地址


在这里插入图片描述

int missingNumber(int* nums, int numsSize) {
    int sum=0;
    for(int i=0;i<=numsSize;i++)
    {
        sum+=i;
    }
    for(int i=0;i<numsSize;i++)
    {
        sum-=nums[i];
    }

    return sum;
}
int missingNumber(int* nums, int numsSize) {
    int sum=0;
    for(int i=0;i<numsSize;i++)//这里判断条件 不能等于 否则会越界
    {
        sum^=nums[i];
        sum^=i;
    }
    sum^=numsSize;
    return sum;
}

请添加图片描述


总结


到了最后:感谢支持

我还想告诉你的是:
------------对过程全力以赴,对结果淡然处之
也是对我自己讲的

举报

相关推荐

0 条评论