文章目录
目录
零、写在前面
本章只是回顾:本章主要讲述了穷举查找的方法
【第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] 也是正确的答案之一。
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.结果