算法(简单)_搜索二维矩阵&分解质因数
时间:2022-07-28
本文章向大家介绍算法(简单)_搜索二维矩阵&分解质因数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
搜索二维矩阵
难度:简单
描述:
写出一个高效的算法来搜索 m × n 矩阵中的值。
这个矩阵具有以下特性:
- 每行中的整数从左到右是从小到大排序的。
- 每行的第一个数大于上一行的最后一个整数。
样例:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
给出 target = 3
,返回 true
题目分析:
双循环找出是否有这个值,根据第二个特性,我们可以跳过一些第二层循环,算法更具效率。
代码:
/**
* @param matrix: matrix, a list of lists of integers
* @param target: An integer
* @return: a boolean, indicate whether matrix contains target
*/
const searchMatrix = function(matrix, target) {
for (let key of matrix.keys()) { // 遍历外层数组
let value = matrix[key]; // 拿到每行元素
// 判断target是否在当前行中,跳过其他不必要循环
if (target <= value[value.length - 1]) {
for (let item of value.keys()) { // 遍历行中元素
if (target === value[item]) { // 找到值
return true;
} else if (target < value[item]) { // 值超过target即找不到(因为是排序的)
return false;
}
}
}
}
return false; // 没有找到即返回false
};
分解质因数
难度:简单
质因数的定义:
能整除给定正整数的质数。
百度百科:质因数
描述:
- 将一个整数分解为若干质因数之乘积
- 你需要从小到大排列质因子
样例:
- 给出
10
, 返回[2, 5]
- 给出
660
, 返回[2, 2, 3, 5, 11]
题目分析:
从小到大排列质因子,需要将同一个质因子整除干净。
比如:20 可以被 2 整除两次。
提示:需要两层循环。
代码:
// 分解质因数
const primeFactorization = function(num) {
let res = [];
// 不需要判定i是否为质数,如果i不为质数,且能整除num时,num早被i的因数所除。故能整除num的i必是质数。
// i * i > num 退出循环 num一开始会在第二层循环被i整除成比较小的数字
for (let i = 2; i * i <= num; i++) {
while (num % i === 0) {
// 直到有余数退出循环
num = num / i; // 改变num
res.push(i); // 没有余数 能整除 这一步会找出所有质因数 不会出现4的那种情况
}
}
if (num !== 1) res.push(num); // num到最后也是质因数
return res;
};
- 每天学一点Docker(3)(制作你的第一个容器)
- 1635: [Usaco2007 Jan]Tallest Cow 最高的牛
- 1653: [Usaco2006 Feb]Backward Digit Sums
- 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场
- 1682: [Usaco2005 Mar]Out of Hay 干草危机
- 1637: [Usaco2007 Mar]Balanced Lineup
- AutoFac在项目中的应用
- 每天学一点Docker(5)——了解Docker架构
- 跨站请求伪造(CSRF/XSRF)
- 我这么玩Web Api(一)
- 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路
- 点双连通分量与割点
- 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐
- 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏
- 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 数组属性和方法