leetcode问题与答案

这几天刷leetcode的题,有几道题找了第二种方法。

  • 从排序数组中删除重复项

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

答案:

var removeDuplicates = function(nums) {
    a = unique(nums)
    nums.splice(0,nums.length)
    for(var i=0;i<a.length;i++){
        if(!isNaN(a[i]))
        nums.push(a[i])
    }
};

// 方法a。
var unique = (a) => [...new Set(a)]

// 方法b。
// var unique = (a) =>{    
//     var b = []
//     for (var i=0,alen = a.length;i<alen;i++){
//         var flag = true
//         for (var j=0,blen = b.length;j<blen;j++){
//             if(a[i] === b[j]){
//                 flag = false
//                 break;
//             }
//         }
//         if(flag == true){
//             b.push(a[i])
//         }
//     }
//     return b
// }
  • 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
	// 方法1.
	var rotate = function(nums, k) {
    	a = nums.splice(nums.length-k,k)
    	a.reverse()
    	for (var i=0;i<a.length;i++){
        	nums.unshift(a[i])
   	 }


// 方法2.
    for (var i=0;i<k;i++){
        a = nums.splice(nums.length-1,1)
        nums.unshift(a)
    }
};
  • 两个数组的交集 II
	var intersect = function(nums1, nums2) {
    	c = nums1.filter(v => nums2.indexOf(v)!=-1)
    
    // 第二种方法。
    // let set1 = new Set(nums1),set2 = new Set(nums2);
    // c = [...new Set([...set1].filter( x => set2.has(x)))];
    return c
};

转载请注明出处。

Oriel Yan

Oriel Yan

lazy~