算法_两数之和&中位数
时间:2022-07-28
本文章向大家介绍算法_两数之和&中位数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
两数之和
难度:简单
描述:
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
你需要实现的函数 twoSum 需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。
样例:
给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].
给出 numbers = [2, 33, 11, 2], target = 4, 返回 [0, 3].
思路分析:
target
减去每个元素的值,得出来的值,就是我们要搜索的值。
代码模板:
/**
* @param numbers: An array of Integer
* @param target: target = numbers[index1] + numbers[index2]
* @return: [index1, index2] (index1 < index2)
*/
const twoSum = function(numbers, target) {};
想一想再看答案
想一想再看答案
想一想再看答案
代码:
- 转成对象:
这是别人的一种解法,比下面的解法复杂点,可以看看,扩展一下思路。
/**
* @param numbers: An array of Integer
* @param target: target = numbers[index1] + numbers[index2]
* @return: [index1, index2] (index1 < index2)
*/
const twoSum = function(numbers, target) {
let map = {};
// key : the complement (target - num)
// value: index for that num
for (let i = 0; i < numbers.length; i++) {
const num = numbers[i];
if (map[num] !== undefined) {
// 找到值
return [map[num], i]; // 第一次保存的index 和 刚找到的下标 即结果。
} else {
// 第一次进入 保存 要搜索的值和index
map[target - num] = i; // 第一次
}
}
return [-1, -1];
};
console.log(twoSum([2, 7, 11, 15], 9), twoSum([2, 33, 11, 2], 4));
- 双循环
const twoSum = function(numbers, target) {
for (let index of numbers.keys()) {
let res = target - numbers[index]; // 要搜索的值
for (let i = numbers.length - 1; i > index; i--) {
// 倒序查找,跳过已经遍历过的值
if (res === numbers[i]) return [index, i]; // 搜索到了 即找到
}
}
};
console.log(twoSum([2, 7, 11, 15], 9), twoSum([2, 33, 11, 2], 4));
- indexOf()
indexOf
的第二个参数是开始搜索的位置,也可以跳过前面已经搜索过的值。
const twoSum = function(numbers, target) {
for (let index of numbers.keys()) {
let res = target - numbers[index]; // 相减
let search = numbers.indexOf(res, index + 1); // 跳过前面已经搜索过的,防止2+2=4 搜索两个2在同一个位置
if (search !== -1) {
return [index, search]; // 直接返回值
}
}
};
console.log(twoSum([2, 7, 11, 15], 9), twoSum([2, 33, 11, 2], 4));
鼓励我一下:
觉得还不错的话,给我的点个star吧
中位数
难度:简单
描述:
给定一个未排序的整数数组,找到其中位数。
中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第 N/2 个数。
样例:
给出数组[4, 5, 1, 2, 3], 返回 3
给出数组[7, 9, 4, 5],返回 5
思路分析:
- 升序排序数组
- 模拟几个数组的返回值,找到里面的规律,找出数组中对应元素。
代码模板:
/**
* @param nums: A list of integers
* @return: An integer denotes the middle number of the array
*/
const median = function(nums) {};
想一想再看答案
想一想再看答案
想一想再看答案
代码:
- 判断奇数偶数,找到对应的下标
/**
* @param nums: A list of integers
* @return: An integer denotes the middle number of the array
*/
const median = function(nums) {
nums.sort((a, b) => {
return a - b; // 升序排序
});
var num = nums.length; // 保存数组长度
if (num % 2 !== 0) {
// 判断奇数偶数
return nums[(num + 1) / 2 - 1]; // 奇数转偶数
} else {
return nums[num / 2 - 1]; // 减一 对应数组下标
}
};
- 奇数上舍入,找到下标
两种写法一样,但无疑第二种写法更为优雅。
/**
* @param nums: A list of integers
* @return: An integer denotes the middle number of the array
*/
const median = function(nums) {
nums.sort((v1, v2) => v1 - v2);
return nums[Math.ceil(nums.length / 2) - 1]; //
};
鼓励我一下:
觉得还不错的话,给我的点个star吧
- spark-streaming集成Kafka处理实时数据
- 使用spark与MySQL进行数据交互的方法
- python分布式环境下的限流器
- commons-pool与commons-pool2连接池(Hadoop连接池)
- Glusterfs 文件系统
- 时过境迁:Oracle跨平台迁移之XTTS方案与实践
- Kazoo Python Zookeeper 选主
- Linux Redis集群搭建与集群客户端实现
- python使用上下文管理器实现sqlite3事务机制
- python服务端多进程压测工具
- 响应式js幻灯片代码一枚
- 使用深度学习检测面部特征,让实时视频聊天变得更有趣
- springboot 注册服务注册中心(zk)的两种方式
- 极速体验:Oracle 18c 下载和Scalable Sequence新特性
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 无锁队列的实现
- Go 单元测试和性能测试
- 01 . etcd简介原理,应用场景及部署,简单使用
- GO 单例模式
- 关于本博客皮肤样式配置
- 03 . Go开发一个日志平台之Elasticsearch使用及kafka消费消息发送到Elasticsearch
- GO 匿名函数和闭包
- Nginx升级加固SSL/TLS协议信息泄露漏洞(CVE-2016-2183)和HTTP服务器的缺省banner漏洞
- GO中间件(Middleware )
- TomcatAJP文件包含漏洞及线上修复漏洞
- golang new和make的区别
- Magicodes.IE之导入导出筛选器
- 界面酷炫,功能强大!这款 Linux 性能实时监控工具超好用!老斯机搞它!
- httprunner学习28-yaml文件 参数化读取 csv 文件字符串转 int
- 30个编程小技巧,提高代码性能