力扣——多数元素

原题如下
多数元素
多数元素

第一种解法:

Class solution{
	public int majorityElement(int[] nums){
	//先计算出判断的界定值
		int dec=nums.length/2;
		//用HashMap来存储记录,泛型限制为Integer,key为数组中的某个数,value为该数在数组中出现的次数
		Map<Integer,Integer> map=new HashMap<Integer,Integer>();
		//遍历数组
		for(int i = 0; i < nums.length; i++){
		//如果map中没有这个key,也就是还没有存储过这个节点,也就是在遍历中出现的新的元素
			if(!map.containsKey(nums[i])
			//存入map
				map.put(nums[i] , 1);
			else
			//存在这个key的时候,让它的vlaue加1
				map.put(nums[i] , map.get(nums[i]) + 1);
		}
		//用keyset来,遍历这个HashMap
		for(Integer i: map.KeySet()){
		//但遍历到某个节点的value大于界定值
			if(map.get(i) > dec)
			//直接返回这个key
				return i;
		}
		//若没有哪个数可以大于界定值,返回0,在正常开发中用-1更好
		return 0;
	}
}

第一种解法其实不是特别好,内存消耗比较大,耗时也长
第一种

第二种解法:

Class solution{
	public int majorityElement(int[] nums){
	//创建一个计数器
		int count = 0;
		//创建一个比较值
		int num = nums[0];
		//遍历数组
		for(int i = 0;i < nums.length; i++){
		//如果比较值与现在正在遍历的数组的数相等,
			if(num == nums[i])
			//则计数器加一
				count++;
			else{
			//否在减一
				count--;
				//确保取下个数时不会越界
				if(i+1<nums.length)
				//若计数器等于0了,则需要下个数进行计数
					if(count == 0)
					//比较值变为下个数
						num = nums[i+1];
			}
		}
		//返回最终结果
		return num;
	}
}

第二种比较推荐 是其他人的思路,在这里做个搬运,(给出这种想法的人没有提到可能数组下标越界的情况)
但可以看出时间明显缩短
第二种

手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘。
——网络

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值