(小)算法题(长期更新)
---恢复内容开始---
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.感觉以前学数论都是背了结论就跑,一直没有理解,感觉不仅容易忘, ...
- MiscCrypto小总结(长期更新……..
1.MISC A.各类文件的隐写 B.压缩包的分析与处理 C.流量分析 D.攻击取证 E.其他 A.各类文件的隐写 图片隐写是常见大类所以我们先介绍图片隐写:这里我们至少需要了解JPEG(jpg) P ...
- 一道小面试算法题的思路
一道小算法题的思路 有这么一道小面试算法题:给定一个长度为 n 的整数数组,下标为 i 的元素表示第 i 天某个股票的价格,每次最多持有一股,每次买卖最多一股,在最多只买卖一次的情况下(先买后卖,不考 ...
- 经典算法题(含答案解析)
时针分针重合几次 表面上有60个小格,每小格代表一分钟, 时针每分钟走1/12小格,分针每分钟走1小格,从第一次重合到第二次重合分针比时针多走一圈即60小格,所以 60/(1-1/12)=720/11 ...
- 大厂敲门砖——算法,手撸3道高频算法题,检测真水平
3道高频算法题 手撸算法1:查找数组中重复元素和重复元素的个数 手撸算法2:写个二分查找demo吧 手撸算法3:把两个有序数组合并成一个有序数组 要进大厂,算法是不可或缺的一环,也是块儿敲门砖,科一都 ...
- leetcode贪心算法题集锦(持续更新中)
leetcode贪心算法题集锦 leetcode贪心算法题集锦(持续更新中).python 和C++编写. 文章目录 leetcode贪心算法题集锦 一.贪心算法 1.盛最多水的容器 2.买股票的最佳 ...
- 做算法题时的一些小技巧
做算法题时的一些小技巧 技巧一: 在用C++做算法题时,我们会觉的cin,cout比scanf,printf使用起来更加的方便,不用指定输入输出格式. 但是cin,cout的运行时间比scanf,pr ...
- 【编程导航】这本小书,把常考算法题讲活了!
编程导航开源仓库:https://github.com/liyupi/code-nav 跪求一个 star ⭐️ 大家好,我是鱼二,今天分享一份非常不错的算法数据结构学习资源. 图解算法数据结构,是 ...
- 有趣的110道LeetCode算法题小抄,势如破竹的面试
前言 随着互联网寒潮的到来, 越来越多的互联网公司提高了面试的难度,其中之一就是加大了面试当中手撕算法题的比例.这里说的算法题不是深度学习,机器学习这类的算法,而是排序,广度优先,动态规划这类既考核数 ...
- 算法题-小彭十分喜欢烤串,但是他的钱只能买固定的烤串的数量M,假设这些烤串的价格相同且恰逢店老板正在举办活动,每个烤串都是用各种不同的食材串成(其中也包括种类相同的)且每个烤串都有三个食材。食材有豆腐
算法题-小彭十分喜欢烤串,但是他的钱只能买固定的烤串的数量M,假设这些烤串的价格相同且恰逢店老板正在举办活动,每个烤串都是用各种不同的食材串成(其中也包括种类相同的)且每个烤串都有三个食材.食材有豆腐 ...
最新文章
- Linux netstat -tunlp查看端口占用情况
- php 获取发票内容,php – 如何从发票ID获取PayPal交易ID
- android merge的作用,Android学习手记-merge
- Golang基本变量
- Python3常见内嵌函数
- 洛谷3396 哈希冲突 【分块】
- 北京公交将标配智能辅助驾驶,具备行人防撞、车道偏离预警
- clang命令编译c++程序时报错
- Tkinter教程之Frame篇
- 每个人都应该了解的金融小知识 -- 利率计算
- 8核、6核、4核、双核CPU是什么意思
- M1芯片安装CleanMyMac X4.7.4的方法(附下载)M1芯片安装那个CleanMyMac X版本?CleanMyMac X已完美支持M1芯片安装 支持big sur系统
- Swing Copters摇摇欲坠游戏再次风靡全球,再次虐心,摔手机
- IntelliJ IDEA 在方法大括号中{}点击回车多出一个},如何取消
- Android 进程和文件的UID/GID
- 注册mysql确认邮件_如何在MySQL中使用电子邮件ID选择@之前的所有内容?
- 定投基金,如何计算年化收益率
- 《Flex+PHP RIA应用开发实战详解-梁文新版》学习日记1
- 【分库分表】ShardingSphere分库分表实战
- WorldQuant因子分析复现
热门文章
- 计算机专业给导师发个人简历,殷保群教授个人简历范文
- php怎么快速背,一个月背部快速蜕变?用上这7招效果绝对意想不到!
- mysql运维工具-----percona-toolkit
- 求学贵在主动、坚持——兼谈学生行为礼仪
- 如果编写 if 时不带 else
- win7设置wifi热点_Windows系统设置WIFI热点
- 测试员≠“背锅侠”:学会这些,扔掉测试人常背的3口“锅”
- Big Brother监控安装
- 请问nj文件如何用html的解析,nj.renderH
- 十个鲜为人知的Linux命令-【3】