---恢复内容开始---

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]

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

function getEverySum(x){if(x<10) return xreturn 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()           //5

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

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

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

// 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) {// 设置一个 mapconst map = new Map() // 设置每个 绝对值 和 namearr.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
}

转载于:https://www.cnblogs.com/musi03/p/10668643.html

(小)算法题(长期更新)相关推荐

  1. 数学小知识(长期更新)

    ###如果有任何地方写错了,欢迎在评论里指出 #前言 今天开始学习数论,大概就是学一些自己以前不会或者说搞得不是特别懂的东西. 原因 1.感觉以前学数论都是背了结论就跑,一直没有理解,感觉不仅容易忘, ...

  2. MiscCrypto小总结(长期更新……..

    1.MISC A.各类文件的隐写 B.压缩包的分析与处理 C.流量分析 D.攻击取证 E.其他 A.各类文件的隐写 图片隐写是常见大类所以我们先介绍图片隐写:这里我们至少需要了解JPEG(jpg) P ...

  3. 一道小面试算法题的思路

    一道小算法题的思路 有这么一道小面试算法题:给定一个长度为 n 的整数数组,下标为 i 的元素表示第 i 天某个股票的价格,每次最多持有一股,每次买卖最多一股,在最多只买卖一次的情况下(先买后卖,不考 ...

  4. 经典算法题(含答案解析)

    时针分针重合几次 表面上有60个小格,每小格代表一分钟, 时针每分钟走1/12小格,分针每分钟走1小格,从第一次重合到第二次重合分针比时针多走一圈即60小格,所以 60/(1-1/12)=720/11 ...

  5. 大厂敲门砖——算法,手撸3道高频算法题,检测真水平

    3道高频算法题 手撸算法1:查找数组中重复元素和重复元素的个数 手撸算法2:写个二分查找demo吧 手撸算法3:把两个有序数组合并成一个有序数组 要进大厂,算法是不可或缺的一环,也是块儿敲门砖,科一都 ...

  6. leetcode贪心算法题集锦(持续更新中)

    leetcode贪心算法题集锦 leetcode贪心算法题集锦(持续更新中).python 和C++编写. 文章目录 leetcode贪心算法题集锦 一.贪心算法 1.盛最多水的容器 2.买股票的最佳 ...

  7. 做算法题时的一些小技巧

    做算法题时的一些小技巧 技巧一: 在用C++做算法题时,我们会觉的cin,cout比scanf,printf使用起来更加的方便,不用指定输入输出格式. 但是cin,cout的运行时间比scanf,pr ...

  8. 【编程导航】这本小书,把常考算法题讲活了!

    编程导航开源仓库:https://github.com/liyupi/code-nav 跪求一个 star ⭐️ 大家好,我是鱼二,今天分享一份非常不错的算法数据结构学习资源. 图解算法数据结构,是 ...

  9. 有趣的110道LeetCode算法题小抄,势如破竹的面试

    前言 随着互联网寒潮的到来, 越来越多的互联网公司提高了面试的难度,其中之一就是加大了面试当中手撕算法题的比例.这里说的算法题不是深度学习,机器学习这类的算法,而是排序,广度优先,动态规划这类既考核数 ...

  10. 算法题-小彭十分喜欢烤串,但是他的钱只能买固定的烤串的数量M,假设这些烤串的价格相同且恰逢店老板正在举办活动,每个烤串都是用各种不同的食材串成(其中也包括种类相同的)且每个烤串都有三个食材。食材有豆腐

    算法题-小彭十分喜欢烤串,但是他的钱只能买固定的烤串的数量M,假设这些烤串的价格相同且恰逢店老板正在举办活动,每个烤串都是用各种不同的食材串成(其中也包括种类相同的)且每个烤串都有三个食材.食材有豆腐 ...

最新文章

  1. Linux netstat -tunlp查看端口占用情况
  2. php 获取发票内容,php – 如何从发票ID获取PayPal交易ID
  3. android merge的作用,Android学习手记-merge
  4. Golang基本变量
  5. Python3常见内嵌函数
  6. 洛谷3396 哈希冲突 【分块】
  7. 北京公交将标配智能辅助驾驶,具备行人防撞、车道偏离预警
  8. clang命令编译c++程序时报错
  9. Tkinter教程之Frame篇
  10. 每个人都应该了解的金融小知识 -- 利率计算
  11. 8核、6核、4核、双核CPU是什么意思
  12. M1芯片安装CleanMyMac X4.7.4的方法(附下载)M1芯片安装那个CleanMyMac X版本?CleanMyMac X已完美支持M1芯片安装 支持big sur系统
  13. Swing Copters摇摇欲坠游戏再次风靡全球,再次虐心,摔手机
  14. IntelliJ IDEA 在方法大括号中{}点击回车多出一个},如何取消
  15. Android 进程和文件的UID/GID
  16. 注册mysql确认邮件_如何在MySQL中使用电子邮件ID选择@之前的所有内容?
  17. 定投基金,如何计算年化收益率
  18. 《Flex+PHP RIA应用开发实战详解-梁文新版》学习日记1
  19. 【分库分表】ShardingSphere分库分表实战
  20. WorldQuant因子分析复现

热门文章

  1. 计算机专业给导师发个人简历,殷保群教授个人简历范文
  2. php怎么快速背,一个月背部快速蜕变?用上这7招效果绝对意想不到!
  3. mysql运维工具-----percona-toolkit
  4. 求学贵在主动、坚持——兼谈学生行为礼仪
  5. 如果编写 if 时不带 else
  6. win7设置wifi热点_Windows系统设置WIFI热点
  7. 测试员≠“背锅侠”:学会这些,扔掉测试人常背的3口“锅”
  8. Big Brother监控安装
  9. 请问nj文件如何用html的解析,nj.renderH
  10. 十个鲜为人知的Linux命令-【3】