1.字符串反转 abc -> cba
方法一:
1 | var str = 'abc'; |
方法二:
1 | var str = 'abc'; |
方法三:
1 | var str = 'abc'; |
方法四:
1 | var str = 'abc'; |
方法五:
1 | var str = 'abc'; |
2.Int类型反转

方法:
1 | function reverseInt(number){ |
3.多维数组扁平化
1 | [1,[2,3],[4,[5,6]]] => [1,2,3,4,5,6]; |
方法一:
1 | var arr = [1, [[2, 3], 4]]; |
方法二:
1 | var arr = [1, [2, 3], [4, [5, 6]]]; |
方法三:
1 | var arr = [1,8,[2, 3], [4, [5, 6]]]; |
方法四:
1 | var arr = [1, 8, [2, 3], [4, [5, 6]]]; |
4.breakCamelCase(‘camelCasing’) => ‘camel Casing’
1 | function breakCamelCase(str){ |
5.camelCase(‘test case’) => TestCase
1 | function camelCase(str) { |
6.toUnderscore(‘TestController’) => ‘test_controller’
1 | function toUnderscore(str) { |
7.toCamelCase(‘the-stealth-warrior’) => ‘theStealthWarrior’
1 | function toCamelCase(str) { |
8.判断两个对象是否相等
1 | var obj1 = {name:'qinhanwen',age:{name:'qinhanwen',age:{a:1}}}; |
9.判断两个数组是否相等
1 | var arr1 = [1, [1, 2]]; |
10.看题吧。。
1 | var obj1 = {a:1,b:2}; |
11.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
1 | //给定 nums = [2, 7, 11, 15], target = 9 |
12.实现一个merge方法
1 | merge([1,2,2,3,4,5,5,6]);//[1,2,3,4,5,6]; |
13.实现如下方法
1 | composeFunction(fn1,fn2,fn3)等于fn3(fn2(fn1())); |
1 | //方法一: |
14.排序
在下面
15.

1 | class Squence { |
16.

1 | function capitalize(str){ |
17.

1 | function maxChar(str){ |
18.

1 | function vowels(str){ |
19.
1 | function pyraid(num){ |
20.两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
1 | 给定 nums = [2, 7, 11, 15], target = 9 |
1 | var twoSum = function(nums, target) { |
1 | var twoSum = function(nums, target) { |
1 | var twoSum = function(nums, target) { |
21.. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例:
1 | 输入: "abcabcbb" |
1 | var lengthOfLongestSubstring = function (s) { |
22.回文数
示例:
1 | 输入: 121 |
1 | var isPalindrome = function(x) { |
23.最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例:
1 | 输入: ["flower","flow","flight"] |
1 | var longestCommonPrefix = function(strs) { |
24.有效的括号
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例:
1 | 输入: "()[]{}" |
1 | var isValid = function(s) { |
25.删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例:
1 | 给定数组 nums = [1,1,2], |
1 | var removeDuplicates = function (nums) { |
26.移除元素
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例:
1 | 给定 nums = [3,2,2,3], val = 3, |
1 | var removeElement = function(nums, val) { |
27.实现 strStr()
实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例:
1 | 输入: haystack = "hello", needle = "ll" |
1 | var strStr = function(haystack, needle) { |
28.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
示例:
1 | 输入: [1,3,5,6], 5 |
1 | var searchInsert = function(nums, target) { |
29.最后一个单词的长度
给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。
如果不存在最后一个单词,请返回 0 。
示例:
1 | 输入: "Hello World" |
1 | var lengthOfLastWord = function(s) { |
30.爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例:
1 | 输入: 2 |
1 | var climbStairs = function(n) { |
31.杨辉三角
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

1 | var generate = function(numRows) { |
32.买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。
示例:
1 | 输入: [7,1,5,3,6,4] |
1 | /** |
33.买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例:
1 | 输入: [7,1,5,3,6,4] |
1 | /** |
34.验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例:
1 | 输入: "A man, a plan, a canal: Panama" |
1 | /** |
35.只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例:
1 | 输入: [2,2,1] |
1 | var singleNumber = function(nums) { |
36.三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件的三元组。
会重复的三元组
1 | var threeSum = function(nums) { |
不重复的三元组
解题思路:先排序,记录最左边(最小值)和右边的值(最大值),然后从左边第二个开始匹配(匹配的值),三个数相加,如果结果大于0说明最大值太大,则最大值左移一位,如果小于0说明匹配的值太小,右移一位。
1 | var threeSum = function (nums) { |
37.最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
1 | 例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. |
解题思路:与上一题类似
1 | /** |
38. 括号生成
示例:
1 | 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 |
解题思路,总共有2n个括号,一半左括号一半右括号,递归,每次都可以添加左括号或者右括号,根据左括号的数量是否小于总数来决定,而右括号必须小于左括号数量。
1 | /** |
39.最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例:
1 | 输入: "babad" |
1 | //暴力破解 |
40.冒泡排序
遍历n次,每次循环相邻元素两两比较,把其中大的元素往后放

1 | var array = [5, 4, 3, 2, 1, 8, 7]; |
41.选择排序
找到最小的,然后替换前面的位置

1 | var arr = [3, 5, 4, 2, 1]; |
42.插入排序
这个确实比较复杂,需要理解很久
1.外层遍历这个不用说,取到当前的 i 项是target
2.内层遍历,从j开始做减1操作,target跟上一个位置
的值比较,如果小于,就做偏移,直到最后不小于,就终止循环,
并且把target赋值给当前位置的值。

1 | var arr = [5, 3, 4, 2, 1]; |
43.归并排序
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案”修补”在一起,即分而治之)。

1 | function mergeSortRec(array) { |
快速排序
它的复杂度为 O(nlog^n),它的性能比其他复杂度一样的排序算法好。也是用分治的方法。

1 | function quick(array, left, right) { |
45.取出数组最大值
es5、es6
1 | var arr = [1,2,3,4,5]; |
46.实现下面
1 | add(1); // 1 |
1 | //方法1这个需要传入参数长度 |
47.删除排序链表中的重复元素
1 | /** |
48.最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
1 | 输入: [-2,1,-3,4,-1,2,1,-5,4], |
思路:
1 | // 假设你是一个选择性遗忘的赌徒,数组表示你这几天来赢钱或者输钱, |
49.跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。
示例 1:
1 | 输入: [2,3,1,1,4] |
思路:
1 | //从最后一位开始遍历,如果找到左边有合适它的,就从当前这个位置开始 |
50.取两个集合中相同的
1 | function fn(arr1,arr2){ |
51.周一算法题之「移动零」
1 | var arr = [0,1,0,3,12]; |
52 汉明重量

1 | // 暴力解法 |
