首页 > 编程语言 > 详细

前端scallop的算法之路

时间:2021-01-28 17:53:37      阅读:26      评论:0      收藏:0      [点我收藏+]

分享自己在leetcode上的解题过程

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

 

我的解题思路:1)利用Set对象的特性,只能存储任意类型的唯一值,来筛选出重复的数据,再与保存的set对象里面的值进行比较

 1 var singleNumber = function(nums) {
 2     let mySet = new Set();
 3     let repeatList = [];
 4     for(let i = 0; i < nums.length; i++) {
 5         if (mySet.has(nums[i])) {
 6             repeatList.push(nums[i]);
 7         } else {
 8             mySet.add(nums[i])
 9         }
10         
11     }
12     //console.log("mySet",mySet);
13     //console.log("repeatList",repeatList);
14     const singleNum = Array.from(mySet).filter(item=>!repeatList.includes(item));
15     console.log("singleNum",singleNum);
16     return singleNum;
17 };
18 singleNumber([1,2,1,2,4,6,7,7,6]);

2)利用两层循环,找到重复的数据,再和原数组比较

 1 /**
 2  * @param {number[]} nums
 3  * @return {number}
 4  */
 5 var singleNumber = function(nums) {
 6     let repeatList = [];
 7     for (let i = 0; i < nums.length; i++) {
 8         const outItem = nums[i];
 9         for(let j = i + 1; j < nums.length; j++){
10             const innerItem = nums[j];
11             if (outItem === innerItem) {
12                 repeatList.push(innerItem);            
         }
15 } 16 } 17 console.log("repeatList", repeatList); 18 const singleNum = nums.filter(item=>!repeatList.includes(item)) 19 console.log("singleNum", singleNum); 20 return singleNum[0]; 21 }; 22 singleNumber([1,2,2,1,3])

2.给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

思路1:根据位置k,截取数组,再重新组合

1 
 /**
  * @param {number[]} nums
* @param {number} k
  * @return {void} Do not return anything, modify nums in-place instead.
*/

var rotate = function(nums, k) { 2 const len = nums.length 3 const index = len? len - k : len 4 const arr = nums.splice(index) 5 const dataset = arr.concat(nums) 6 dataset.forEach((item,index)=>{ 7 nums[index] = item 8 }) 9 };

思路2:无限轮播思想,复制一份原数组,再与原数组组合形成新数组

1 
 /** 
  * @param {number[]} nums
* @param {number} k
  * @return {void} Do not return anything, modify nums in-place instead.
*/
  var rotate = function(nums, k) {
2     const len = nums.length
3     const copyNums = [...nums,...nums]
4     const index = len ? len - k%len : len
5     const _nums = copyNums.splice(index, len)
6     for(let i = 0; i < _nums.length; i++){
7         nums[i] = _nums[i]
8     }
9 };

 

持续更新中...

 

前端scallop的算法之路

原文:https://www.cnblogs.com/scallop/p/14239985.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!