📜  奇偶序列中的第k个数(1)

📅  最后修改于: 2023-12-03 15:08:12.055000             🧑  作者: Mango

奇偶序列中的第k个数

在一个整数序列中,奇数和偶数交替出现,例如:1,2,3,4,5,6,7,8,9...。现在给定一个正整数k,要求输出该序列中的第k个数。

解法1:暴力枚举

最简单的方法是从1开始枚举,每次判断该数是奇数还是偶数,直到找到第k个数为止。

def get_number(k: int) -> int:
    count = 0
    current_num = 1
    while count < k:
        if current_num % 2 == 1:
            count += 1
        if count == k:
            break
        current_num += 1
    return current_num

该方法的时间复杂度是O(k),对于较小的k还是比较适用的,但对于比较大的k,时间复杂度会变得很高。

解法2:利用数学公式

通过观察可以发现,偶数的下标都是偶数,奇数的下标都是奇数。因此可以根据k是奇数还是偶数,分别使用不同的数学公式来计算第k个数。

当k是偶数时:

第k个数是通过(k//2)*2的公式计算得出的,因为(k//2)是从1开始的下标,将其乘以2就可以得到第k个偶数。

当k是奇数时:

与偶数类似,第k个数是通过((k-1)//2)*2+1的公式计算得出的,因为((k-1)//2)是从1开始的下标,将其乘以2再加1就可以得到第k个奇数。

def get_number(k: int) -> int:
    if k % 2 == 0:
        return (k // 2) * 2
    else:
        return ((k - 1) // 2) * 2 + 1

该方法的时间复杂度是O(1),比较高效。

总结

本题可以通过暴力枚举和利用数学公式两种方法来解决,而利用数学公式的方法在时间复杂度上更加高效。在实际项目中应尽可能使用高效的算法,提高程序的性能。