给你一个整数数组。除一次外,所有数字出现偶数次。您需要找到出现奇数次的数字。你需要用 o(n) 时间复杂度和 o(1) 空间复杂度来解决它。
例如:
int array[] = new int[]{20, 40, 50, 40, 50, 20, 30, 30, 50, 20, 40, 40, 20};
Number which occurs odd number of times is : 50
解决方案 1:使用两个 for 循环并比较元素:
这是这个问题的蛮力解决方案,但它需要 o(n*n) 时间复杂度。
解决方案 2:使用Hashing
您可以将 key 用作数字并将 count 用作值,每当 key 重复时,您都可以将 counter 增加 1。
int getOddTimesElementHashing(int ar[])
{
int i;
HashMap<Integer,Integer> elements=new HashMap<Integer,Integer>();
for (i = 0; i < ar.length; i++)
{
int element=ar[i];
if(elements.get(element)==null)
{
elements.put(element, 1);
}
else
elements.put(element, elements.get(element)+1);
}
for (Entry<Integer,Integer> entry:elements.entrySet()) {
if(entry.getValue()%2==1)
{
return entry.getKey();
}
}
return -1;
}
但上述解决方案需要 o(n) 的空间复杂度。
方案三:使用bitwise XO:
您可以对所有元素进行: bitwise XO,它将为您提供最终出现奇数次的元素。
int getOddTimesElement(int ar[])
{
int i;
int result = 0;
for (i = 0; i < ar.length; i++)
{
result = result ^ ar[i];
}
return result;
}
上述算法解决了时间复杂度为 O(n) 和空间复杂度为 o(1) 的问题,这是上述程序的最佳解决方案。
查找数组中出现奇数次的数字的Java程序:
package org.arpit.java2blog;
//Java program to find the element occurring odd number of times
public class NumberOddTimesMain
{
int getOddTimesElement(int ar[])
{
int i;
int result = 0;
for (i = 0; i < ar.length; i++)
{
// XOR operation
result = result ^ ar[i];
}
return result;
}
public static void main(String[] args)
{
NumberOddTimesMain occur = new NumberOddTimesMain();
int array[] = new int[]{20, 40, 50, 40, 50, 20, 30, 30, 50, 20, 40, 40, 20};
System.out.println("Number which occurs odd number of times is : "+occur.getOddTimesElement(array));
}
}
当你运行上面的程序时,你会得到以下输出:
Number which occurs odd number of times is : 50
本文向大家介绍Java程序查找数字出现次数为奇数,包括了Java程序查找数字出现次数为奇数的使用技巧和注意事项,需要的朋友参考一下 Java程序查找数字出现次数为奇数,Java代码如下- 示例 输出结果 名为Demo的类包含一个名为'odd_occurs'的静态函数。此函数遍历整数数组,并检查以查看这些数字出现的次数。重复出现的奇数作为输出返回。在main函数中,定义了一个整数数组,并将数组的长度
本文向大家介绍用程序找出数组中出现次数超过一半的数字相关面试题,主要包含被问及用程序找出数组中出现次数超过一半的数字时的应答技巧和注意事项,需要的朋友参考一下 思路: 1、 一个数字在数组中出现次数超过了一半,则排序后,位于数组中间的数字一定就是该出现次数超过了长度一半的数字(可以用反证法证明),也即是说,这个数字就是统计学上的中位数。最容易想到的办法是用快速排序对数组排序号后,直接取出中间的那个
本文向大家介绍编写Golang程序以查找数组中每个元素的出现次数,包括了编写Golang程序以查找数组中每个元素的出现次数的使用技巧和注意事项,需要的朋友参考一下 例子 输入数组= [1、3、4、3、2、3、4、0、2] 元素 1 3 4 2 0 出现次数 1 3 2 2 1 解决这个问题的方法 步骤1: 定义一个接受数组的方法。 步骤2: 定义一个映射,其中key将是数组的元素,起始值为0。 步
问题内容: 给你一个包含 1 到 n 的整数数组,但数组中从 1 到 n 的数字之一丢失了。您需要提供最佳解决方案来找到丢失的数字。数组中的数字不能重复。 例如: 问题答案: 使用公式 n=n*(n+1)/2 求 n 个数字的总和 查找给定数组中存在的元素的总和。 减法(n 个数字的总和 - 数组中存在的元素的总和)。 查找数组中缺失数字的Java程序: 当你运行上面的程序时,你会得到以下输出:
NowCoder 题目描述 // html Input: nums = 1, 2, 3, 3, 3, 3, 4, 6 K = 3 Output: 4 解题思路 // java public int GetNumberOfK(int[] nums, int K) { int first = binarySearch(nums, K); int last = binarySearc
问题内容: 假设我有一个包含以下值的表。 所以我想构造以下输出。 它仅获取列中每个元素的计数。 我在列出唯一列时遇到了问题。 谁能告诉我该怎么做? 我已经弄乱了和,但是无法获取左侧的值列表。 问题答案: 你是这个意思吗