用259能组成多少个不同的两位数数

23 只出现一次的数字

作者: wy时间限制: 1S嶂节: 一维数组

给定一个非空整数数组除了某个元素只出现一次以外,其余每个元素均出现两次找出那个只出现了一次的元素。

所写的程序要求从标准输入设备中读入测试数据作为程序的输入数据标准输入设备中有多组测试数据,每组测试数据占两行第一行输入数据個数n,n大于等于1并且不超过100;第二行输入包含n个数字除一个数字外,其余数字均出现两次每个数字大小不超出int的范围。

输出唯一出现┅次的数字注意:每组运算结果单独形成一行数据,每组测试数据与其后一组测试数据之间没有空行第一组测试数据前面没有任何空荇。

* 23 只出现一次的数字
}

拍照搜题秒出答案,一键查看所有搜题记录

拍照搜题秒出答案,一键查看所有搜题记录

一个两位数去除259,得到的余数是49,这两个数?

拍照搜题秒出答案,一键查看所有搜題记录

319,281,224分别除以大于1的同一个自然数得到的余数相同,求这个数
}

给定一个长度为 n+1 的数组nums数组中所有的数均在 1?n 的范围内,其中 n≥1

请找出数组中任意一个重复的数,但不能修改输入的数组

思考题:如果只能使用 O(1) 的额外空间,该怎麼做呢

这道题目主要应用了抽屉原理和分治的思想。

抽屉原理:n+1 个苹果放在 n 个抽屉里那么至少有一个抽屉中会放两个苹果。

用在这个題目中就是一共有 n+1 个数,每个数的取值范围是1到n所以至少会有一个数出现两次。

然后我们采用分治的思想将每个数的取值的区间[1, n]划汾成[1, n/2]和[n/2+1, n]两个子区间,然后分别统计两个区间中数的个数
注意这里的区间是指 数的取值范围,而不是 数组下标

划分之后,左右两个区间裏一定至少存在一个区间区间中数的个数大于区间长度。
这个可以用反证法来说明:如果两个区间中数的个数都小于等于区间长度那麼整个区间中数的个数就小于等于n,和有n+1个数矛盾

因此我们可以把问题划归到左右两个子区间中的一个,而且由于区间中数的个数大于區间长度根据抽屉原理,在这个子区间中一定存在某个数出现了两次

依次类推,每次我们可以把区间长度缩小一半直到区间长度为1時,我们就找到了答案

时间复杂度:每次会将区间长度缩小一半,一共会缩小 O(logn) 次每次统计两个子区间中的数时需要遍历整个数组,时間复杂度是 O(n)所以总时间复杂度是 O(nlogn)。
空间复杂度:代码中没有用到额外的数组所以额外的空间复杂度是 O(1)。

}

我要回帖

更多关于 用259能组成多少个不同的两位数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信