LeetCode-数组章节
1.只出现一次的数字
难度:简单
给定一个非空整数数组,除了一个元素外,每个元素都会出现两次。找到只出现一次的元素。
描述:
您的算法应该具有线性时间复杂度。你能在不占用额外空间的情况下做到吗?
例1:
输入: [2,2,1]
输出: 1
例2:
输入: [4,1,2,1,2]
输出: 4
解决方案思路:
这个问题有很多解决方案,但是这个问题不需要额外的空间。最简单的方法就是用异或运算求解。
异或运算满足三个性质:
记住这三个性质是解决找重复问题的关键。
解决方案类{
public int single number(int[]nums){ 0
int结果=0;
//遍历数组中的每个数字,进行异或运算。
for(int num : nums){ 0
结果^=小水;
}
返回结果;
}
}
/**
时间复杂度:O(n)遍历的数组长度
复杂性:O(1)不需要额外的空间。
*/
2.多次元素
难度:简单
给定一个n大小的数组,找出它的大部分元素。大多数元素都出现在数组中。n/2?元素。
您可以假设数组是非空的,并且在给定的数组中总是有许多元素。
例1:
输入:[3,2,3]
产出:3
例2:
输入:[2,2,1,1,1,2,2]
产出:2
解决方案思路:
借助哈希表统计数组中每个数字的个数,然后进行相应的业务处理。
解决方案类{
public int MajorityElEMENT(int[]nums){ 0
//先扔进自定义方法,计算数组中每个数字的个数。
映射整数,整数计数=个数(个数);
//遍历地图,找到数字最大的数字。
地图。EntryInteger,Integer majorityEntry=null
(地图。EntryInteger,整数条目:计数. entryset()){ 0
if(majority entry==null | | entry . getvalue(). majority entry . getvalue()){ 0
majorityEntry=entry
}
}
返回MajorityEntry . GetKey();
}
//使用哈希表
//自定义计算数组数量的方法。
私有映射整数,整数计数(int[]nums){ 0
MapInteger,Integer计数=新HashMapInteger,Integer();
for(int num : nums){ 0
if(!counts . Contains KeY(num)){ 0
//没有,就加一个新的。
counts.put(num,1);
} else {
//有就拿出来加一个。
counts.put(num,counts . get(num)1);
}
}
返回计数;
}
}
/**
时间复杂度:O(n)遍历数组。
空间复杂度:O(n)通过哈希表记录出现的数字个数。
*/
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/154015.html