Leecode日志.1.169

单纯是对编过的垃圾代码写写备注,没有任何营养,不建议参考。
序号:1
难度:简单
用时:两天
2020-03-26~2020-03-27
在这里插入图片描述我的肤浅想法:
当时很愚蠢的直接把这道题当成求众数的一道题,想法非常简单,建立新数组array,分别存放nums中每个数字的个数。将后续数字依次和之间判断过得数字进行比较,根据比较结果,要么将之前数字的对应array位加一,要么建立新的一个对应array位。最后再找出array中最大的一个array[j],则其对应的num[j]就是最多的数字。

当时出现的错误:
提交到Leecode在线运行的时候测试用例有的对有的错

经过修改发现问题:
①内层循环起始值不对,本来写的j从1开始,会造成num[0]和num[1]没参与比较,问题原因也与出现问题的测试用例相符。

出现问题的原因:
太长时间不写东西,头脑迟钝,思路不清晰,代码写了很久,中途有过间断,两次主题思想稍微有所差别,见代码注释掉的那行。第二次继续写的时候就忘了第一次加的这一行了。产生错误。

教训:
不要中断,多写注释,

观摩大佬们的答案的收获:
真是太震撼了
1.首先我根本没注意条件中提到的多数数字的具体定义(要求出现次数大于数组长度除2向下取整)
2.评论区的大佬的思想有三。
https://leetcode-cn.com/problems/majority-element/solution/3chong-fang-fa-by-gfu-2/
第一种和我的方法一个意思,但是用了hashmap很简洁的就实现了。我感觉这个通用一些。
第二种和第三种都利用了条件中提到的特殊定义。非常巧妙
第二种:排序,数组中间位数的数字即为最多数字。
第三种:摩尔投票法
感觉很狠
在这里插入图片描述`码

class Solution {
    public int majorityElement(int[] nums) {
        int cand_num = nums[0], count = 1;
        for (int i = 1; i < nums.length; ++i) {
            if (cand_num == nums[i])
                ++count;
            else if (--count == 0) {
                cand_num = nums[i];
                count = 1;
            }
        }
        return cand_num;
    }
}

作者:gfu
链接:https://leetcode-cn.com/problems/majority-element/solution/3chong-fang-fa-by-gfu-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。`

最下面是我的垃圾代码

public class majorityElement {
	    public int searchmajorityElement(int[] nums) 
	    {
	    	int majority = 0;
	    	int length = nums.length;
	    	int i,j,k;
	    	int mark = 0;
	    	int[] Array = new int[length];
	    	//Array[0] = 1;改了一个地方,可能很多地方都要改
	    	for(i=0; i<length; i++)
	    	{
	    		for(j=0;j<i;j++)//j开始是1造成错误,此时num[0]未参与比较
	    		{
	    			if(nums[j] == nums[i]){
	    				Array[j]++;
	    				break;
	    			}
	    			
	    		}		
	    		if(j==i)//不应该在内层循环里
	    			Array[i]++;	
	    	}
	    	for(k=0;k<length;k++)
	    	{
	    		if(Array[k]>Array[mark])
	    			mark = k;
	    	}
	    	majority = nums[mark];
	    	return majority;
	    }
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
				int[] nums = {6,5,5};
				int majority;
				majorityElement solution = new majorityElement();
				majority = solution.searchmajorityElement(nums);
				System.out.println("最多的数字是:"+majority);
				
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值