面试题积累_01

yizhihongxing

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++高精度运算(大整数运算)详细讲解 简介 在进行高精度运算时,我们需要使用到很大的整数进行计算,如:1000的阶乘,1到1000的和等。而C/C++默认的整型数据类型一般只能存储到2^32-1或2^64-1这样的范围,需要我们使用数组或链表等结构来存储这类大数。本篇文章将详细介绍如何使用C/C++实现大整数和高精度运算。 实现方式 在C/C++中,大…

    C 2023年5月22日
    00
  • Lua和Nginx结合使用的超级指南

    非常感谢您对“Lua和Nginx结合使用的超级指南”的关注。下面,我将为您详细讲解该攻略的完整流程。 导语 Nginx是一款轻量级、高性能的Web服务器和反向代理服务器,由于其高性能和可靠性,成为了许多大型互联网企业的首选。而Lua作为一种高效、轻量级的脚本语言,具有易于扩展和快速开发等优点,被广泛应用于Nginx中,弥补了Nginx对于脚本语言支持的不足。…

    C 2023年5月23日
    00
  • JS中JSON对象和String之间的互转及处理技巧

    当涉及JavaScript中JSON对象和String之间的互转及处理时,需要注意一些技巧才能顺利完成目标。 一、JSON字符串和JSON对象之间的转换 在JavaScript中,可以将JS对象转化为JSON对象,或将JSON对象转化为JS对象。JSON对象和JS对象的主要区别在于JSON属于独立的数据格式,不能包含函数、变量等。因此,在转换的过程中,需要注…

    C 2023年5月23日
    00
  • FFmpeg开发笔记(二)搭建Windows系统的开发环境

    由于Linux系统比较专业,个人电脑很少安装Linux,反而大都安装Windows系统,因此提高了FFmpeg的学习门槛,毕竟在Windows系统搭建FFmpeg的开发环境还是比较麻烦的。不过若有已经编译好的Windows版本FFmpeg开发包,那就免去了繁琐的Windows编译过程,所以直接安装已编译的FFmpeg开发包,还是相对容易的。在Windows系…

    C 2023年4月30日
    00
  • C语言 文件I/O

    下面是C语言文件I/O的完整使用攻略。 什么是文件I/O 文件I/O是指文件的输入/输出操作。C语言中,文件的读写操作主要通过<stdio.h>头文件中提供的函数实现。 文件的读写操作 打开文件 在进行文件读写前,首先需要打开文件: FILE *fopen(const char *filename, const char *mode); 其中,f…

    C 2023年5月9日
    00
  • Win7系统开机黑屏提示错误代码0xc000000e的三种原因及解决方法

    Win7系统开机黑屏提示错误代码0xc000000e的三种原因及解决方法 在使用Win7系统时,偶尔会出现开机黑屏,并提示错误代码0xc000000e的情况。这种情况让系统无法正常启动,用户需要采取正确的解决措施来解决这个问题。本文将详细讲解Win7系统开机黑屏提示错误代码0xc000000e的三种原因及解决方法。 原因1:系统引导程序损坏 系统引导程序是指…

    C 2023年5月23日
    00
  • C语言算法练习之数组求素数

    C语言算法练习之数组求素数 概述 本篇文章将介绍如何使用C语言实现数组求素数的算法。素数,又称质数,是指除了1和它本身以外,不能被其他自然数整除的正整数。本篇文章的算法流程如下:输入一个正整数n,计算出小于等于n的所有素数,将它们存储在一个数组中,并输出这些素数。该算法将使用C语言实现。 算法实现 1. 定义函数 首先,我们需要定义一个函数来计算小于等于n的…

    C 2023年5月22日
    00
  • Mac系统下源码编译安装MySQL 5.7.17的教程

    下面是“Mac系统下源码编译安装MySQL 5.7.17的教程”: 准备工作 在开始安装前,需要准备一下基础工作: 安装Xcode开发环境 Xcode 是 Mac 上的 IDE 工具,可以辅助开发各种编程语言的程序。获取安装包方式有两种: 在 Mac App Store 中搜索 Xcode 下载安装(需要苹果账号); 前往苹果的开发者网站手动下载并安装。(需…

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