1.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
var twoSum = function(nums, target){
let res = new Map()
for(var i=0,len=nums.length;i<len;i++){
if(res.has(target - nums[i])) return [res.get(target-nums[i]), i] res.set(nums[i], i)
} console.log(res)
} twoSum([2,5,7,8,9], 15)
(2) [2, 3] ------------------------------------------------------------------------------------ // 类似给定数组,找出最大差值,最大的这个差值都是以右边 - 左边得出来的 如:var arr = [4,2,7,5,11,13,8,1] 当中最大差值是9 11-2 = 9
var arr = [4,2,7,5,11,13,8,1]
function maxDiff(arr){
  if(arr.length<=1) return NaN
  let min = Math.min(arr[0], arr[1])
  let maxDiff = arr[1]-arr[0]

   for(let i=0; i<arr.length; i++){
    if(arr[i] > min) {
      maxDiff = Math.max(maxDiff, arr[i]-min)
    } else min = arr[i]
   }

   return maxDiff

}
console.log(maxDiff(arr))

[4,2,7,5,11,13,9,1].reduce((result, item, index, data) => Math.max(result, ...[...data].slice(0, index).map(v => item -v)));

[4,2,7,5,11,13,9,1].reduce((result, item, index, data) => Math.max(result, item - Math.min(...[...data].slice(0,index))));

// 给定一个整数无序数组和变量sum,如果存在数组中任意两项和使等于sum 的值,则返回true。否则 false

//例如数组 [3,5,1,4] 和sum=9

const findSum = (arr, sum) =>
arr.some((set => n => set.has(n) || !set.add(sum - n))(new Set));

var findSum = (arr, sum)=> arr.some((function(set){
  return function (n){
    return set.has(n) || !set.add(sum - n)
  }
})(new Set))


第三大的数

var thirdMax = function(nums){
nums.sort((a, b)=> b-a) let map = new Map
for(let i = 0,len=nums.length; i<len; i++){
let cur = nums[i]
if(!map.get(cur)){
map.set(cur, 1)
if(map.size === 3) return cur
}
} return nums[0]
} console.log(thirdMax([2,3]))

2.递归案例:求一个数字,各个位数上的数字 和: 123  ---> 6

function getEverySum(x){
if(x<10) return x
return x % 10 + getEverySum(parseInt(x/10))
}
console.log(getEverySum(564564))

3. 数组  var arr = ['1-2', '2-8', '1-3', '2-4', '6-10', '2-5']

 转换成:[ {key: 1, values: [2 , 3]}, {key: 2, values: [8, 4, 5]}, {key: 6, values: [10]}]

var arr = ['1-2', '2-8', '1-3', '2-4', '6-10', '2-5']
var fn = arr => {
var res = []
var obj = arr.reduce((pre, cur)=> {
var [k, v] = cur.split('-')
pre[k] ? pre[k].push(v): pre[k] = [v]
return pre
}, {}) for(const [key, values] of Object.entries(obj)){
res.push({key, values})
}
// arr.map(v => v.split('-')).reduce((pre, [k, v])=> {
      (pre[k] = pre[k] || []).push(v)
return pre
     }, {})

    // return Object.entries(obj).map(([key, values])=> ({key, values}))

    return res
}
console.log(fn(arr))

4.实现一个sum方法使其有以下表现

sum(2,3).valueOf()           //

sum(2,3,4).valueOf()         //

sum(2,3)(4).valueOf()        //

sum(2,3,4)(2)(3,4).valueOf() //
// sum() 的结果可以继续使用 () 运算符,说明 sum() 返回的是一个函数(函数/函数表达式/箭头函数的统称);另外,这个返回值还有 valueOf() 方法,所以可以先搭个框
function sum() {
const fn = () => {};
fn.valueOf = () => {};
return fn;
} function sum(...args) {
const r = args.reduce((a, b) => a + b); const fn = (...args) => {
return sum(r, ...args);
}; fn.valueOf = () => r;
return fn;
}
------------------------------------------------------------------------------
// 类似 fn(1).value = 1 fn(1)(2).value = 5 fn(1)(2)(3).value = 14

function fn(){
  const a = function(m){
   a.value = m*m
    return a
  }
  a.value = 1
  return a
}


5.递归修改json的key值

var dataObject = {
"1": {
"name": "第一级1",
"type": "第一级2",
"describe": "第一级3",
"testNum": "第一级4",
"1-1": {
"name": "第二级5",
"type": "第二级6",
"describe": "第二级7",
"testNum": "第二级8",
"1-1-1": {
"name": "第三级9",
"type": "第三级q",
"describe": "第三级w",
"testNum": "第三级e"
}
}
}
};
// 将里面的1-1,1-1-1,1-2之类的值修改成对应的name字段里面的值,需要替换成下面这种的:
var dataObject = {
"第一级1": {
"name": "第一级1",
"type": "第一级2",
"describe": "第一级3",
"testNum": "第一级4",
"第二级5": {
"name": "第二级5",
"type": "第二级6",
"describe": "第二级7",
"testNum": "第二级8",
"第三级9": {
"name": "第三级9",
"type": "第三级q",
"describe": "第三级w",
"testNum": "第三级e"
},
"第三级r": {
"name": "第三级r",
"type": "第三级ty",
"describe": "第三级y",
"testNum": "第三级y"
}
}
}
}
function generate(obj) {
let _obj = {}
Object.entries(obj).forEach(([key, value]) => {
if (typeof value !== 'object') {
_obj[key] = value
} else {
_obj[value.name] = generate(value)
}
})
return _obj
} var res = generate(dataObject)
console.log(res)

6. 输入一个值获取最近的值,并返回

var arr = [
["IP-1", 0],
["IP-2", 13],
["IP-3", 68],
["IP-4", 138],
["IP-5", 149],
["IP-6", 834],
["IP-7", 1090],
["IP-8", 1247],
["IP-9", 1310],
["IP-10", 1956],
["IP-11", 2270],
["IP-12", 3337],
]
// 出入 200,返回 IP-7
var res = function (value) {
// 设置一个 map
const map = new Map()
// 设置每个 绝对值 和 name
arr.forEach(x => {
const number = Math.abs(value - x[1])
map.set(number, x[0])
})
// 得到 map里面最小的 value,得到名字
return map.get(Math.min.apply(null, Array.from(map.keys())))
}
console.log(res(2000)) // IP-10

7. 2个多维数组查找交集 打标识

var A = [
{id: 1},
{
id: 2,
children: [
{id: 3},
{id: 4},
{
id: 5,
children: [{
id: 6
}]
}
]
}
];
var B = [
{id: 1},
{
id: 2,
children: [{
id: 5,
children: [{
id: 6
}]
}]
}];
let c = method(A, B)
//结果
c = [
{id: 1, disabled: true},
{
id: 2,
disabled: true,
children: [
{id: 3},
{id: 4},
{
id: 5,
disabled: true,
children: [{
id: 6,
disabled: true
}]
}
]
}
];
function method (treeA, treeB) {
return dfs(treeA, new Set(flat(treeB)))
} function dfs (root, dict) {
for (node of root) {
if (dict.has(node.id)) {
node.disabled = true
}
if (node.children) {
dfs(node.children, dict)
}
}
return root
} function flat (root, path = []) {
for (node of root) {
path.push(node.id)
if (node.children) {
flat(node.children, path)
}
}
return path
}

8.查找对象的上一级

var arr = [
{
check: false,
child: [
{
check: false,
child: [
{
check: true,
},
{
check: true
}
]
},
{
check: false,
child: [
{
check: true,
},
{
check: false,
}
]
}
]
},
] // 实现结果:
var res= [
{
check: false,
child: [
{
check: true,
child: [
{
check: true,
},
{
check: true
}
]
},
{
check: false,
child: [
{
check: true,
},
{
check: false,
}
]
}
]
},
] --------------------------------------- function check (root) {
const _checkNode = x => x.check = x.child ? x.child.every(_checkNode) : x.check
root.forEach(_checkNode)
return root
}
var mapper = item =>
[item.child
&& (item.check = (item.child = item.child.map(mapper))
.filter(c => c.check).length === item.child.length)
, item][1] console.dir(arr.map(mapper));

9

function Stack() {
let items = [] // 存储数据 // 从栈顶添加元素,也叫压栈
this.push = function (item) {
items.push(item)
} // 弹出栈顶元素
this.pop = function () {
return items.pop()
} // 返回栈顶元素
this.top = function () {
return items[items.length - 1]
} // 判断是否为空
this.isEmpty = function () {
return items.length == 0
} // 返回栈的大小
this.size = function () {
return items.length
}
} /*
* 思路:
* 遇到左括号,就把左括号压入栈中
* 遇到右括号,判断栈是否为空,为空说明没有左括号与之对应,缺少左括号,字符串括号不合法
* 如果不为空,则把栈顶元素移除,这对括号抵消了
*
* 当for循环结束后,如果栈是空,就说明所有的括号都抵消掉了
* 如果栈里还有元素,说明缺少右括号,字符串括号不合法
*
* */ -------------------------------
// 判断字符串里的括号是否合法
function is_leagl_brackets(string) {
let stack = new Stack()
for (var i=0; i< string.length; i++) {
var cur = string[i]
if (cur == '(') {
stack.push(cur)
} else if(cur == ')') {
if (stack.isEmpty()) {
return false
} else {
stack.pop()
}
}
} return stack.isEmpty()
} console.log('111------', is_leagl_brackets('fasdfadsf()(fdsa()fsa('))
console.log('222------', is_leagl_brackets('fasdfadsf()')) -------------------------------------- // 逆波兰表达式,也叫后缀表达式,他将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式
// 例如(a+b)*(c+d) 转换为ab+cd+*
//示例 ['4', '13', '5', '/', '+' ]等价于 (4 + (13/5)) = 6
// 4 入栈
// 13 入栈
// 5 入栈
// 遇到了 / 连续两次弹出栈顶元素 a b b / a = c c入栈
// 遇到 + 连续两次弹出栈顶元素 e f e + f = 6 6入栈 function calc_exp(exp) {
let stack = new Stack() for (let i = 0; i <exp.length; i++) {
let cur = exp[i]
if (['+', '-', '*', '/'].includes(cur)){
let val1 = stack.pop(), val2 = stack.pop()
let exp_str = val1 + cur + val2
// 计算并取整
var res = parseInt(eval(exp_str))
// 计算结果压入栈中
stack.push(res)
} else stack.push(cur)
} return stack.pop()
}
console.log('calc_exp(exp)------', calc_exp(['4', '13', '5', '/', '+' ]))

10.

var entry = {
a: {
b: {
c: {
dd: "abcdd"
}
},
d: {
xx: "adxx"
},
e: "ae"
}
}; // // 要求转换成如下对象
// var output = {
// "a.b.c.dd": "abcdd",
// "a.d.xx": "adxx",
// "a.e": "ae"
// } // 这道题是典型的DFS。这里有个技巧,就是将res作为参数传过去,
// 从而子函数(helper)可以对其进行修改。 这样我们可以不必依赖返回值,
// 也就避免了很多判断。 function helper(entry, prefix, res) {
for (const key in entry) {
if (entry[key] instanceof Object) {
helper(entry[key], `${prefix}.${key}`, res);
} else {
res[`${prefix.slice(1)}.${key}`] = entry[key];
}
}
} function format(entry) {
const res = {};
helper(entry, "", res);
return res;
} console.log(format(entry));

11.

 list = [
{
id: 1,
label: 'a',
children: [{
id: 4,
label: 'b',
children: [{
id: 9,
label: 'c'
}, {
id: 10,
label: 'd'
}]
}]
}
] // 怎么根据label = c的条件 拿到 id为9的这条属性 varfind = (list, label) => {
let result;
for (let i = 0; i < list.length; i++) {
const item = list[i];
if (item.label === label) {
return result = item;
} else {
if (item.children) {
result = find(item.children, label);
}
}
}
return result;
}; var result = find(list, "c");
console.log(result);

12 求众数

给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于 n / 2 的元素

网络释义
Maxdiff: 最大偏差

LeetCode算法题(长期更新)的更多相关文章

  1. LeetCode算法题-Subdomain Visit Count(Java实现)

    这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...

  2. LeetCode算法题-Number of Lines To Write String(Java实现)

    这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...

  3. LeetCode算法题-Unique Morse Code Words(Java实现)

    这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...

  4. LeetCode算法题-Rotate String(Java实现)

    这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...

  5. LeetCode算法题-Rotated Digits(Java实现)

    这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...

  6. LeetCode算法题-Letter Case Permutation(Java实现)

    这是悦乐书的第315次更新,第336篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第184题(顺位题号是784).给定一个字符串S,将每个字母单独转换为小写或大写以创建另 ...

  7. LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)

    这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...

  8. LeetCode算法题-Jewels and Stones(Java实现)

    这是悦乐书的第313次更新,第334篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第182题(顺位题号是771).字符串J代表珠宝,S代表你拥有的石头.S中的每个字符都是 ...

  9. LeetCode算法题-Toeplitz Matrix(Java实现)

    这是悦乐书的第312次更新,第333篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第181题(顺位题号是766).如果从左上角到右下角的每个对角线具有相同的元素,则矩阵是 ...

  10. LeetCode算法题-Prime Number of Set Bits in Binary Representation(Java实现)

    这是悦乐书的第311次更新,第332篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第180题(顺位题号是762).给定两个正整数L和R,在[L,R]范围内,计算每个整数的 ...

随机推荐

  1. leetcode94

    class Solution { public: vector<int> V; void inOrder(TreeNode* node) { if (node != NULL) { if ...

  2. 解决 jdk8 Illegal key size or default parameters 错误

    网上搜到的答案如:https://blog.csdn.net/educast/article/details/81060085  大多是jdk1.6或1.7版本,有的jdk是1.8.99之前的版本,而 ...

  3. SSM商城项目(十)

    1.   学习计划 1.使用freemarker实现网页静态化 a)Freemarker的使用方法 b)Freemarker模板的语法 c)Freemarker整合springmvc 2.Active ...

  4. 详细分析MySQL事务日志(redo log和undo log) 表明了为何mysql不会丢数据

    innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过程,其实它 ...

  5. oracle 连接字符串的问题

    未指定的错误,发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息.数据类型不被支持. 原因是你用的ADO   for   ORACLE的驱动是微软的Microsoft OLE DB ...

  6. MFC笔记4

    1.添加图片 1)静态加载图片,直接在resourceView中控件设置就可以以实现 2)动态加载时,按照鸡啄米的教程http://www.jizhuomi.com/software/193.html ...

  7. 使用JavaMail发送邮件-从FTP读取图片并添加到邮件正文发送

    业务分析: 最近工作需要,需要从FTP读取图片内容,添加到邮件正文发送.发送邮件正文,添加附件采用Spring的MimeMessageHelper对象来完成,添加图片也将采用MimeMessageHe ...

  8. 解决xcode10打包报错:That command depends on command in Target ‘xxx’:scrpit phase"[CP] Copy Pods Resources"

    问题:使用xcode10打包报错,提示 error:Multiple commands produce ‘xxxx/xxx.app’ 1)Target ‘xx’ has create director ...

  9. python爬虫小说代码,可用的

    python爬虫小说代码,可用的,以笔趣阁为例子,python3.6以上,可用 作者的QQ:342290433,汉唐自远工程师 import requests import refrom lxml i ...

  10. 【python深入】装饰器理解及使用

    装饰器,其实就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下额外增加功能,装饰器的返回是一个函数对象. 用一个例子来说明一下什么是函数对象: 从这里可以看到,直接在函数后面加bar(),就 ...