[万人前提计划]《C语言入门100例》(第27例) 穷举查找——习题(C语言)(超简单易懂)φ(゜▽゜*)♪

文章目录

目录

文章目录

零、写在前面

一、统计位数为偶数的数字

二、有序数组中的单一元素

三、调整数组顺序使奇数位于偶数前面


零、写在前面

本章只是回顾:本章主要讲述了穷举查找的方法

【第27题】给定一个 n 个元素的数组,再给出 x ,查找 x 在数组中的下标 | 穷举法_英雄哪里出来-CSDN博客难度:★★☆☆☆,O(1) 还是 O(n)https://blog.csdn.net/WhereIsHeroFrom/article/details/118273228每天会开启一篇试读文章,每日坚持打卡就可以一直白嫖哦

一、统计位数为偶数的数字

1.题目

给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。

示例 1:

输入:nums = [12,345,2,6,7896]
输出:2
解释:
12 是 2 位数字(位数为偶数) 
345 是 3 位数字(位数为奇数)  
2 是 1 位数字(位数为奇数) 
6 是 1 位数字 位数为奇数) 
7896 是 4 位数字(位数为偶数)  
因此只有 12 和 7896 是位数为偶数的数字

力扣https://leetcode-cn.com/problems/find-numbers-with-even-number-of-digits/

2.解题

思路:穷举  就完了

bool judge(int a){   // 判断输入的数是否是偶数位   因为给了数的范围,直接列出来就可以了
    if(a>=1&&a<10){
        return 0;
    }
     if(a>=10&&a<100){
        return 1;
    }
     if(a>=100&&a<1000){
        return 0;
    }
     if(a>=1000&&a<10000){
        return 1;
    }
     if(a>=10000&&a<100000){
        return 0;
    }
    if(a==100000){
        return 1;
    }
    return 0;
}
int findNumbers(int* nums, int numsSize){
    int i,ans=0;
    for(i=0;i<numsSize;++i){  //从0开始枚举 是偶数位 就++
        if(judge(nums[i])){
            ans++;
        }
    }
    return ans;    //返回结果

3.结果

二、有序数组中的单一元素

1.题目

给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。

示例 1:

输入: nums = [1,1,2,3,3,4,4,8,8]
输出: 2

力扣https://leetcode-cn.com/problems/single-element-in-a-sorted-array/

2.解题

int singleNonDuplicate(int* nums, int numsSize){
    int has[100001]={0};  //定义并初始化数组
    int i;
    for(i=0;i<numsSize;++i){
        has[nums[i]]++;   //穷举每一个数,如果出现两次就会++两次,出现1次就会++一次就是1
    }
    for(i=0;i<numsSize;i++){  //然后穷举has找到这个1次的数
        if(has[nums[i]]==1){
            return nums[i];  //在这返回结果
            
        }
    }
    return 0;  //这其实没啥用,但不写报错,return点啥都行
}

3.结果

三、调整数组顺序使奇数位于偶数前面

1.题目

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。

示例:

输入:nums = [1,2,3,4]
输出:[1,3,2,4] 
注:[3,1,2,4] 也是正确的答案之一。

力扣https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/2.解题

int Qua(int x) {
    return x % 2;  //对2求余判奇偶
}

int cmp(const void *a, const void *b) {  //使用库函数,设计cmp
    return Qua(*(int *)b) - Qua(*(int *)a);  //要把求余之后的大的排前面,所以a,b换个位置
}

int* exchange(int* nums, int numsSize, int* returnSize){
    int i;
    int *ret = (int *)malloc( sizeof(int) * numsSize ); 
    for(i = 0; i < numsSize; ++i) {
        ret[i] = nums[i];                               
    }
    qsort(ret, numsSize, sizeof(int), cmp);             
    *returnSize = numsSize;  //返回数组长度                    
    return ret;//返回数组
}

3.结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

空白-checkmate

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

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

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

打赏作者

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

抵扣说明:

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

余额充值