Leetcode 题目刷题练习1

目录

第1题:至少是其他数字两倍的最大数

第2题:寻找数组的中心下标

第3题:字符个数统计

第4题:多数元素

第5题:自除数

第1题:至少是其他数字两倍的最大数

题目要求:

代码实现:

int dominantIndex(int* nums, int numsSize)
{
    int i = 0;
    int max = 0;
    int count=0;
    int y = 0;
    for(i=0;i<numsSize;i++)
    {
        scanf("%d",&nums[i]);
        if(nums[i]>max)
        {
            max=nums[i];
            y=i;//记录下标
        }
    }
    for(i=0;i<numsSize;i++)
    {
        if(nums[i]==max)
        {
            continue;
        }
        else
        {
            if(max>2*nums[i]||max==2*nums[i])
            count++;
        }
    }
    if(count==numsSize-1)
    {
        return y;
    }
    else if(numsSize==1)
    {
        return 0;
    }
    else
    {
        return -1;
    }
}

第2题:寻找数组的中心下标

题目要求:

 代码实现:

法一: 

int pivotIndex(int* nums, int numsSize)
{
    int i = 0;
    int left = 0;
    int sum = 0;
    for(int i = 0;i<numsSize;i++)
    {
        scanf("%d",&nums[i]);
        sum+=nums[i];
    }
    for(int i = 0;i<numsSize;i++)
    {
        if(left*2+nums[i]==sum)
        {
            int y = i;
            return y;
        }
        else
        {
            left+=nums[i];
        }
    }
    return -1;
    
}

法二:

int pivotIndex(int* nums, int numsSize) {
    for (int i = 0; i < numsSize; i++) {
        int left = 0;
        int right = numsSize - 1;
        int l_sum = 0, r_sum = 0;
        while (left < i) {
            l_sum += nums[left];//求左边和
            left++;
        }
        while (right > i) {
            r_sum += nums[right];//求右边和
            right--;
        }
        if (l_sum == r_sum) {
            return i;
        }
    }
    return -1;
}

第3题:字符个数统计 

题目要求:
代码实现: 

#include <stdio.h>
#include <string.h>
int main()
{
    char str[500]={0};
    int num[128]={0};
    int count = 0;
    scanf("%s",str);
    int len = strlen(str);
    for(int i = 0;i<len;i++)
    {
        if(num[(int)str[i]]==0)
        {
            num[(int)str[i]]=1;
            count++;
        }
    }
    printf("%d\n",count);
   
    return 0;
}

第4题:多数元素 

 题目要求:

代码实现: 

int majorityElement(int* nums, int numsSize)
{
    //诸王争霸,我方人口占总人口的n/2以上,所有人实力相当
    int num = nums[0];//第一位霸王是我方的
    int cnt = 0;//目前我方一人,遍历下去
    for (int i = 0; i < numsSize; i++)//从第1位开始
    {
        if (num == nums[i])//如果是给我方撑腰的就+1
        {
            cnt++;
        }
        else
        {
            cnt--;//不是给我方撑腰的就-1
            if (cnt == 0) //没有人撑腰换霸主
            {
                num = nums[i + 1];
                cnt = 0;
            }
        }
    }
    return num;
}

第5题:自除数 

题目要求:

 代码实现: 

int* selfDividingNumbers(int left, int right, int* returnSize)
{
    int* P = (int*)malloc(sizeof(int) * (right - left + 1));//开辟空间
    int cnt = 0;
    int sum = 0;
    for(int i = left;i<=right;i++)
    {
        int tmp = i;
        while(tmp)
        {
          if((tmp%10==0)||(i%(tmp%10)!=0))
          {
            break;//不是自除数
          }
          else
          {
              tmp/=10;
          }
        }
        if(tmp==0)
        {
            cnt++;
            P[sum++]=i;
        }
    }
    *returnSize = cnt;
        return P;
}

欢迎指正!

 

 

 

 

 

 

 

 

 

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mikk-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值