记录一下算法题的学习10
leetcode题目:给你一个 非空 整数数组
nums
,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间
技巧 位运算 异或运算 Java中异或运算符^ 异或运算性质三种
代码展示
class Solution {
public int singleNumber(int[] nums) {
int sole=0;
//遍历整个数组里的元素,由于题目所给条件除了某个元素只出现一次以外,其余每个元素均出现两次
//合理使用异或运算的特点
//我们最终获得的就是只出现一次的元素
for(int num=0;num
leetcode题目:给定一个大小为
n
的数组nums
,返回其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋
的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
1.摩尔投票法 核心理念为 票数正负抵消
class Solution {
public int majorityElement(int[] nums) {
int candidates= nums[0], count = 1;
for (int i = 1; i < nums.length; ++i) {
if (candidates == nums[i])
count+=1;
else if ( --count == 0) {
candidates = nums[i];
count = 1;
}
}
return candidates;
}
}
2.数组排序法 将数组 nums 排序,数组中点的元素 一定为众数。代码展示
class Solution {
public int majorityElement(int[] nums) {
//数组升序
Arrays.sort(nums);
int most_number=0; //初始化多数元素--》众数为0
most_number=nums[nums.length/2]; //将数组 nums 排序,数组中点的元素 一定为众数。
return most_number;
}
}
class Solution {
public int majorityElement(int[] nums) {
//数组降序 jdk8使用
Integer[] integers = Arrays.stream(nums).boxed().toArray(Integer[]::new);
Arrays.sort(integers ,Collections.reverseOrder ());
int most_number=0; //初始化多数元素--》众数为0
most_number=integers[integers.length/2]; //将数组 nums 排序,数组中点的元素 一定为众数。
return most_number;
}
}
注意
举例Integer[] 和int[] 互转 jdk8使用Stream流来实现互相转化
// int[] --> Integer[]
int[] arr = {1, 2, 3, 4, 5};
Integer[] integers = Arrays.stream(nums).boxed().toArray(Integer[]::new);
// Integer[] --> int[]
int[] nums = Arrays.stream(integers).mapToInt(Integer::valueOf).toArray();
3.哈希表统计法: 遍历数组
nums
,用 HashMap 统计各数字的数量,即可找出众数
方法 | 作用 |
getOrDefault() | 获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值 hashmap.getOrDefault(Object key, V defaultValue) |
Map.Entry | Map声明的一个内部接口,此接口为泛型,定义为Entry |
map.entrySet() | java中 键-值 对的集合,Set里面的类型是Map.Entry,一般可以通过map.entrySet()得到。 entrySet实现了Set接口,里面存放的是键值对。一个K对应一个V |
class Solution {
public int majorityElement(int[] nums) {
HashMap map=new HashMap<>();//建立一个哈希表
for(int i=0;i entry:map.entrySet()){
if(entry.getValue()>value){
value = entry.getValue();
key = entry.getKey();
}
}
return key;
}
}
结束拜拜!