LeetCode::只出现一次的数字——初级算法

题目:

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]

输出: 1

示例 2:

输入: [4,1,2,1,2]

输出: 4

思路方法:

这道题相对来说比“存在重复”是稍微难一点的,这道题我暂时没有想出来比较简单的算法,我的方法还是按常规思路来解决的。

我们的目的就是找出数组中那个没有重复的元素,“存在重复”那道题只是判断而已,虽然只是多加了一个条件,但是我在实现代码的时候并不是那么容易。我的想法是这样的:让数组中的每一个元素与出本身外的其他元素都比较一遍,同时设定一个bool型的二维数组,行数为数组元素个数(表示每个元素对应一行),列数为行数减一(表示每个元素的每次比较),在比较过程中如果两个元素不相等,那么就让bool二维数组对应行列的元素置为true,否则置为false。这样全部比较完成后,那个数组中不重复的元素对应的一行全部都为true,所以再用一个循环,判断bool型二维数组中每一行的true个数,这里同时还要设置一个整型数组,大小跟输入数组大小相等,而且元素都置为0,这个数组就记录bool型二维数组中每行true的个数,最后找出这个数组中数值为bool型列数的下标值,这个下标值即为输入数组中那个无重复元素的下标,返回输入数组中的这个下标值对应的值即可。

代码如下:

class Solution {
public:
    int result(vector<int>& nums) {
            int n=nums.size();         //size()函数返回数组nums的大小
	    bool judge[n][n-1];
	    int sum[n];
            for(int i=0;i<n;i++)
            {
                sum[i]=0;
            }
            for(int i=0;i<n;i++)
	    {
                int list=-1;
		for(int j=0;j<n;j++)
		{
		    if(i!=j)
                    {
                       list++;
		       if(nums[i]!=nums[j])
		       {
                           judge[i][list]=true;
		       }
                        else
                        {
                            judge[i][list]=false;
                        }
                     }  
		 }
	     }
	     for(int i=0;i<n;i++)
	     {
	          for(int j=0;j<n-1;j++)
		  {
		        if(judge[i][j]==true)
			{
				sum[i]++;
			}
		  }
	      }
	      for(int i=0;i<n;i++)
	      {
		   if(sum[i]==n-1)
		   {
			return nums[i];
		   }
	      }
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值