面试题积累_01

1

如何判断一个数是否为奇数?

//常规方法
bool isOdd_Method1(int n)
{
	if (n % 2)
		return true;
	else
		return false;		 
}
//高效方法
bool isOdd_Method2(int n)
{
	//奇数的二进制形式最后一位一定是1
	return n & 0x1;
}

注:二进制除了最后一位其他均是2的倍数,故如为奇数,则二进制形式的最后一位一定为1.

2

如何判断一个整数是否为2的幂?

bool isPowerof2_Method1(unsigned n)
{
	unsigned i = 1;
	//i = 1,2,4,8,...
	while (i < n)
	{
		i <<= 1;
	}
	//i >= n
	return i == n;
}

bool isPowerof2_Method2(unsigned n)
{
	//2的整数幂的二进制形式,只有一位为1,其余均为0
	//此方法n不可以取0
	return (n * n - 1) == 0;
}

示例:
面试题积累_01

3

给定一个不为0的整数,找出last set bit.
例:
输入 0011 0100
输出 4
面试题积累_01

int lastSetBit(int n)
{
   return n & -n;
}

4

给定一个数组,里面的整数都是成对出现的,只有一个数例外,请找出这个数。
例:
输入:[1,2,3,4,4,5,2,3,1]
输出:5

关键要知道异或运算的性质:

  • a ^ 0 = a
  • a ^ a = 0
  • a ^ b = b ^ a
  • (a ^ b) ^ c = a ^ (b ^ c)
int findSigleNum(int arr[], int n)
{
	int sigleNum = 0;
	for (int i = 0; i < n; i++)
	{
		sigleNum ^= arr[i];
	}

	return sigleNum;
}

4_拓展

给定一个数组,里面的整数都是成对出现的,只有两个数例外,请找出这两个数。
例:
输入:[1,2,3,4,4,5,2,3,1,6]
输出:5 6
面试题积累_01

void findSigleNum(int arr[], int n, int* pa, int* pb)
{
	int tmp = 0;
	for (int i = 0; i < n; i++)
	{
		tmp ^= arr[i];
	}
	// 此时tmp = a ^ b,即要找的两个数的异或

	/*tmp有个特点,即它的二进制形式从右向左为1(异或运算,不同为1)的一位就是这两个不同的数第一个不相同的一位
	故根据此特征将整组数分为两组数,再分别在这两组数里找到例外的这个数即是最终结果*/
	int lastSetBit = tmp & (-tmp);
	for (int i = 0; i < n; i++)
	{
		if (arr[i] & lastSetBit)
		{
			*pa ^= arr[i];
		}
		else
		{
			*pb ^= arr[i];
		}
	}
}

原文链接:https://www.cnblogs.com/MyXjil/p/17080916.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:面试题积累_01 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月20日

相关文章

  • C语言圣诞树的实现示例

    C语言圣诞树的实现示例 在这个示例中,我们将会使用C语言来实现一个圣诞树的输出效果。代码中将会用到循环、条件语句、字符输出、延时等知识点,让我们一起来看看该如何实现吧。 实现思路 实现圣诞树的思路很简单,我们可以分成两个部分来实现: 打印出圣诞树的形状,包括树干和树叶部分。 在圣诞树上挂上圣诞灯,增添节日气氛。 代码实现 基本思路讲解完了,我们来看看代码: …

    C 2023年5月23日
    00
  • C语言制作简易金山打字通功能的代码

    制作简易金山打字通功能的代码可以分为以下几个步骤: 1. 安装必要的工具 为了能够编写并编译出C语言程序,我们需要先安装一些必要的工具。这些工具包括: 文本编辑器:例如Notepad++、Sublime Text等,可以用于编写代码。 GCC编译器:GCC是一套广泛使用的C语言编译器,可用于编译源代码并生成可执行文件。 Make工具:Make工具可用于自动化…

    C 2023年5月24日
    00
  • 12个C语言必背实例分享

    12个C语言必背实例攻略 本文将分享12个C语言必背实例,涉及到的知识点从基础的数据类型、数组、结构体到文件操作等。以下是每个实例的说明及代码示例。 1. 输入输出 实例说明 通过 scanf 函数输入三个数,再通过 printf 函数输出这三个数的和 代码示例 #include <stdio.h> int main() { int a,b,c,…

    C 2023年5月23日
    00
  • C C++ 题解LeetCode1417重新格式化字符串

    C/C++ 题解 LeetCode 1417 重新格式化字符串 题目描述 给定一个由字母、数字和空格组成的字符串 s,你需要将其重新格式化,使得任意两个相邻字符之间都有且仅有一个空格,并且首尾字符之间也不能有空格。 返回 重新格式化后的字符串,如果无法按要求重新格式化,则返回一个 空字符串。 示例说明 示例 1 输入:s = “a0b1c2″输出:”a 0b…

    C 2023年5月24日
    00
  • C语言实现栈的示例详解

    C语言实现栈的示例详解 栈(Stack)是一种非常重要的数据结构,在许多编程语言中都有广泛的应用。在C语言中,我们可以利用数组来实现栈数据结构。下面将介绍C语言实现栈的示例详解。 栈的结构 栈是一种线性数据结构,它具有以下特点: 后进先出(LIFO):最后压入栈的元素最先出栈; 插入(入栈)和删除(出栈)操作都在栈顶进行。 示意图如下: |_______| …

    C 2023年5月23日
    00
  • C++ API功能设计的实现

    实现C++ API功能设计有以下几个步骤: 1.需求分析 需求分析是实现功能设计的第一个步骤,它是确保API能够满足用户需求的关键步骤。在需求分析阶段,需要先明确API所要实现的功能和API的入参和出参以及API的使用方法。 2.功能实现 根据需求分析结果,进行功能设计并进行实现。API的功能实现可能需要涉及到许多的技术,需要在函数的定义和实现过程中考虑技术…

    C 2023年5月22日
    00
  • C语言中的自定义类型之结构体与枚举和联合详解

    C语言中的自定义类型之结构体与枚举和联合详解 什么是自定义类型 C语言中的自定义类型是开发人员按照自己的需求所定义的类型。通过自定义数据类型,可以使数据类型的使用更为规范,提高程序的可读性和可维护性。 C语言中常见的自定义类型包括结构体、枚举和联合。 结构体 结构体是一种用户自定义的数据类型,它允许我们将不同类型的变量组合在一起,形成一个新的数据类型。结构体…

    C 2023年5月23日
    00
  • 暗影精灵3 Pro值得买吗?惠普暗影精灵III Pro 144Hz电竞屏笔记本全面评测

    暗影精灵3 Pro值得买吗?——惠普暗影精灵III Pro 144Hz电竞屏笔记本全面评测 引言 暗影精灵系列一直以高性能和高配置吸引着广大游戏玩家的关注,而其中的暗影精灵3 Pro更是备受瞩目。本文将对这款笔记本进行全面评测,分析其性能、散热、外观等方面,帮助大家了解暗影精灵3 Pro是否值得购买。 外观设计 暗影精灵3 Pro采用了HP独有的暗影系金属材…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部