LeetCode 算法
来源:互联网 发布:seafile数据是否加密 编辑:程序博客网 时间:2024/06/07 18:42
本文参照 LeetCode题解 里面的例子都是用c/c++实现的,为了学习算法,将里面的实现方式改为JavaScript【如果有侵权请联系我】
数组类的算法
Remove Element
作为开胃菜,我当然选取了最容易的一道题目,在一个数组里面移除指定value,并且返回新的数组长度。这题唯一需要注意的地方在于in place,不能新建另一个数组。
方法很简单,使用两个游标i,j,遍历数组,如果碰到了value,使用j记录位置,同时递增i,直到下一个非value出现,将此时i对应的值复制到j的位置上,增加j,重复上述过程直到遍历结束。这时候j就是新的数组长度。
function removeEle (ary, ele) { for(let i = 0; i < ary.length; i++) { if(ary[i] === ele){ ary.splice(i, 1); // 注意数组删除后会有数组塌陷的问题 i--; } } return ary;}
Remove Duplicates from Sorted Array
这道题目与前一题Remove Element比较类似。但是在一个排序好的数组里面删除重复的元素。
/** * 在一个排序好的数组里面删除重复的元素 * @param ary */function filterAry(ary) { const counter = {}; for (let i = 0; i < ary.length; i++) { if (counter[ary[i]]) { ary.splice(i, 1); i--; // 注意数组塌陷; } else { counter[ary[i]] = true; } } return ary;}
Remove Duplicates from Sorted Array II
同样是移除重复的元素,但是可以允许最多两次重复元素存在
这里我们可以稍微把上面那个方法扩展下
/** * 在一个排序好的数组里面删除重复的元素 * @param ary * @param repeatCount */function filterAry(ary, repeatCount) { const counter = {}; for (let i = 0; i < ary.length; i++) { if (counter[ary[i]]) { counter[ary[i]] += 1; if(counter[ary[i]] > repeatCount){ ary.splice(i, 1); i--; // 注意数组塌陷; } } else { counter[ary[i]] = 1; } } return ary;}
push One
将一个数字的每个位上的数字分别存到一个一维数组中,最高位在最开头,我们需要给这个数字加一,即在末尾数字加一,如果末尾数字是9,那么则会有进位问题,而如果前面位上的数字仍为9,则需要继续向前进位
function pushOne(ary) { const aryLength = ary.length; for (let i = aryLength - 1; i > -1; i--) { if (ary[i] === 9) { ary[i] = 0; continue; } ary[i] += 1; return ary; } ary.unshift(1); return ary;}
我们稍微在上一题的基础上扩展下,进位为指定的,比如 有一个数组
[1,2,3,4] 我们指定进位为2 然后第一项为最高位,
4 进1 变成 5 进位为2 5%2 = 2…1 那么4变成了1 向前进2
3 进 2 变成 5 同上 变为 1
…
处理完以后应该为 [1,1,0,1,1]
function pushOne(ary, carryFlag) { const aryLength = ary.length; let addCount = 1; // 初始为1 for (let i = aryLength - 1; i > -1; i--) { const result = ary[i] + addCount; if(result < carryFlag){ ary[i] = result; return ary; } ary[i] = result % carryFlag; addCount = Math.floor(result /carryFlag); } while (addCount){ ary.unshift(addCount % carryFlag); addCount = Math.floor(addCount / carryFlag); } return ary;}
Merge And Sort
/* * Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may assume that A has enough space (size that is greater or equal to m + n) to hold additional elements from B. The number of elements initialized in A and B are m and n respectively. 给你两个整数数组, A, B 合并并排序 使用JS 的concat加sort 代码是最简洁的 * */function mergeAndSort(aryA, aryB) { let a = aryA.length; let b = aryB.length; const maxLength = a + b; for (let i = maxLength - 1; i >= 0; i--) { if (aryA[a - 1] < aryB[b - 1]) { aryA[i] = aryB[b - 1]; b -= 1; } else { aryA[i] = aryA[a - 1]; a -= 1; } } return aryA;}
阅读全文
0 0
- LeetCode算法
- LeetCode 算法
- 算法:经典leetcode算法题解
- LeetCode 回溯算法 backtracking
- Leetcode中的二分算法
- leetcode 一句话算法
- leetcode算法之TwoSum
- leetcode算法思路总结
- LeetCode 算法实现:TwoSum
- 【Leetcode算法】-Add Digits
- 【Leetcode算法】- Move Zeroes
- 【Leetcode算法】- Add Binary
- 【Leetcode算法】- Rotate Array
- 整理leetCode算法系列
- Leetcode sql算法题
- leetcode -- 常用算法
- LeetCode-算法总结
- LeetCode算法练习题Java
- 彻底清除Linux centos minerd木马 wnTKYg木马
- Unity3D Shader(8)——Vertex Shader(漫反射)
- hdu 6103 -Kirinriki
- 2016 ACM青岛区域赛题解
- vimdesktop --goreliu 版本配置
- LeetCode 算法
- MPI实践——ParallelRank程序
- Excel 数据 存 MySQL
- Idea中ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter
- 例题1.8 彩色立方体 Colored Cubes UVALive
- Java图形用户接口
- Java基础——HelloWorld2
- (7)字符串类型:varchar、char、text、enum和set(不常用)
- FileInputStream&FileOutputStream 和 BufferedInputStream&BufferedOutputStrem的性能测试小案例