C语言 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
时间: 2023-05-31 13:02:49 浏览: 105
算法思路:
1.定义一个计数器count,用来记录已经遍历的正整数的个数。
2.从第一个正整数开始遍历,每遍历一个正整数,count自增1。
3.当count等于K时,记录当前遍历到的正整数的值。
4.继续遍历,直到遍历完所有正整数。
5.返回记录的正整数的值。
算法实现:
```c
#include <stdio.h>
int findKthDigit(int* nums, int numsSize, int k) {
int count = 0;
int i;
for (i = 0; i < numsSize; i++) {
int num = nums[i];
while (num > 0) {
count++;
if (count == k) {
return num % 10;
}
num /= 10;
}
}
return -1;
}
int main() {
int nums[] = {123, 456, 789};
int numsSize = 3;
int k = 7;
int digit = findKthDigit(nums, numsSize, k);
printf("%d\n", digit);
return 0;
}
```
算法分析:
时间复杂度:O(nm),其中n是正整数的个数,m是正整数的位数。因为要遍历所有的正整数,对于每个正整数,需要遍历它的每一位,所以时间复杂度是O(nm)。
空间复杂度:O(1),算法只使用了常数个额外的变量。
阅读全文