前端算法-数字出现一次

简介: 前端算法-数字出现一次

题目

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

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

输入: nums = [4,1,2,1,2]
输出: 4

思路一

首先我们先将nums数组使用sort方法由大到小排序,在定义num1变量,默认为0,用来存放只出现一次的数字,在使用for循环对nums数组进行遍历,如果num1变量与nums[i]项相等,则将nums[i]赋值给num1,如果num1变量与nums[i]项不相等,则说明数组中出现了一个新的元素,在进行比较nums[i]项和nums[i+1]项是否相等,如果相等则说明nums[i]出现了两次,如果不相等,则表明nums[i]只出现了一次,返回num1变量

var singleNumber = function(nums) {
  nums.sort((a,b)=>a-b);
    let num1 = 0;
    for(let i=0;i<nums.length;i++){
        if(num1==nums[i]){
            num1=nums[i];
        }else if (nums[i]==nums[i+1]){
                num1=nums[i+1];
            }
        else{
            num1 = nums[i];
            return num1
        }   
    }
};

思路二

我们先声明一个空数组arr,然后判断当前的nums数组长度是否等于1,如果等于1则直接将当前nums数组的第一项返回出去,如果不是则进行循环nums数组,在循环中使用indexOf方法判断循环的当前项是否在arr数组中,如果不存在则使用push方法追加到arr数组中,如果存在,则使用splice方法结合indexOf方法将当前项从arr数组中删除掉,最后将arr数组的第一项返回出去即可

var singleNumber = function (nums) {
       let arr = []
       if (nums.length == 1) {
           return nums[0]
        } 
        for (let i = 0; i < nums.length; i++) {
            if (arr.indexOf(nums[i]) == -1) {
                arr.push(nums[i])
            } else {
                arr.splice(arr.indexOf(nums[i]), 1)
            }
        }
        return arr[0]
};


相关文章
|
12天前
|
前端开发 算法
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
|
13天前
|
移动开发 算法 前端开发
前端算法之堆排序
前端算法之堆排序
16 1
|
13天前
|
算法 前端开发
前端算法之快速排序
前端算法之快速排序
17 0
|
13天前
|
算法 前端开发 搜索推荐
前端算法之归并排序
前端算法之归并排序
14 0
|
12天前
|
缓存 算法 前端开发
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
|
13天前
|
算法 前端开发
前端算法之基数排序
前端算法之基数排序
14 1
|
13天前
|
算法 前端开发 搜索推荐
前端算法之桶排序
前端算法之桶排序
7 1
|
13天前
|
存储 算法 前端开发
前端算法之计数排序
前端算法之计数排序
14 1
|
13天前
|
算法 前端开发 搜索推荐
前端算法之希尔排序
前端算法之希尔排序
4 0
|
13天前
|
算法 前端开发 搜索推荐
前端算法之插入排序
前端算法之插入排序
14 0