全文目录
前言
🎁主要知识点
穷举法
📓课后习题
1295. 统计位数为偶数的数字
540. 有序数组中的单一元素
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
📑写在最后
☘前言☘
今天是c语言基础打卡的第26天,今天这些题我都写过,给个题解供大家参考把。
相关链接:
【第27题】给定一个 n 个元素的数组,再给出 x ,查找 x 在数组中的下标 | 穷举法
全文大约阅读时间: 20min
🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人
✨联系方式:2201891280(QQ)
🎁主要知识点
穷举法
其实很简单,就是与所有元素作比较,找到返回位置,找不到返回-1
int n; int a[1000001]; int findIndex(int size, int a[], int value) {// 寻找的函数 int i; for(i = 0; i < size; ++i) { if(value == a[i]) { // 找到元素提前返回 return i; } } return -1; // 没找到 }
📓课后习题
1295. 统计位数为偶数的数字
1295. 统计位数为偶数的数字
给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。
解题思路
枚举,符合要求就计数就好了。
bool weishu(int n){//返回位数是否为偶数 int count = 0; while(n){ count ++; n /= 10; } return !(count&1);//与count/2 == 0没有本质区别 } int findNumbers(int* nums, int numsSize){ int count = 0; for(int i = 0;i < numsSize;i++) if(weishu(nums[i])) count++;//符合条件则统计 return count; }
540. 有序数组中的单一元素
540. 有序数组中的单一元素
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。
解题思路
其实是有序的,顺序查找就好了
int singleNonDuplicate(int* nums, int numsSize){ int i; for(i = 0;i < numsSize - 1;i += 2) if(nums[i] != nums[i + 1]) return nums[i];//判断 return nums[i]; }
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
540. 有序数组中的单一元素
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
解题思路
这个不要求排序,就双指针,交换元素就好了。
int* exchange(int* nums, int numsSize, int* returnSize){ int i = 0 , j = numsSize - 1; *returnSize = numsSize; while(i < j){ while((nums[i]&1)&&i < j) //找到第一个偶数 i++; while((!(nums[j]&1))&& i < j) //找到第一个奇数 j--; if(i < j){ nums[i] = nums[i] ^ nums[j];//交换i j对应元素 nums[j] = nums[i] ^ nums[j]; nums[i] = nums[i] ^ nums[j]; } else break; } return nums; }