算法练习之杨辉三角,杨辉三角的第 k 行,买卖股票的最佳时机
1. 杨辉三角
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入:
输出:
[
[],
[,],
[,,],
[,,,],
[,,,,]
]
java
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> rs = new ArrayList<List<Integer>>();
List<Integer> prior = null;
for(int i=1;i<=numRows;i++){
List<Integer> tmp = new ArrayList<>();
for(int j=0;j<i;j++){
if(j==0||j==i-1){
tmp.add(1);
}else{
tmp.add(prior.get(j-1)+prior.get(j));
}
}
rs.add(tmp);
prior = tmp;
}
return rs;
}
}
php
class Solution { /**
* @param Integer $numRows
* @return Integer[][]
*/
function generate($numRows) {
$rs = [];
for($i=1;$i<=$numRows;$i++){
$tmp = [];
for($j=0;$j<$i;$j++){
if($j==0||$j==$i-1){
array_push($tmp,1);
}else{
array_push($tmp,$rs[$i-2][$j-1]+$rs[$i-2][$j]);
}
}
array_push($rs,$tmp);
}
return $rs;
}
}
2.杨辉三角的第 k 行
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
示例:
输入: 3
输出: [1,3,3,1]
直接使用组合公式
C(n,i) = n!/(i!*(n-i)!)
则第(i+1)项是第i项的倍数=(n-i)/(i+1);
java
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> rs= new ArrayList<>();
long m = 1;
for(int i=0;i<=rowIndex;i++){
rs.add((int)m);
m = m*(rowIndex-i)/(i+1);
}
return rs;
}
}
注:
m不能为int,会发生溢出
php
class Solution { /**
* @param Integer $rowIndex
* @return Integer[]
*/
function getRow($rowIndex) {
$m = 1;
$rs = [];
for($i=0;$i<=$rowIndex;$i++){
array_push($rs,(int)$m);
$m = $m*($rowIndex-$i)/($i+1);
}
return $rs;
}
}
3.买卖股票的最佳时机
(1)给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
示例 1:
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。 示例 2:
输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
java
class Solution {
public int maxProfit(int[] prices) {
if(prices.length==0) return 0;
int min = prices[0];
int max = 0;
for(int i=1;i<prices.length;i++){
if(prices[i]<min){
min = prices[i];
}else if(prices[i]-min>max){
max = prices[i]-min;
}
}
return max;
}
}
php
class Solution { /**
* @param Integer[] $prices
* @return Integer
*/
function maxProfit($prices) { $min = max($prices);
$max = 0;
foreach ($prices as $key => $value) {
if($value<$min){
$min = $value;
}else if($value-$min>$max){
$max = $value-$min;
}
}
return $max;
}
}
(2)给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:不能同时参与多笔交易(必须在再次购买前出售掉之前的股票)。
示例 1:
输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。 示例 2:
输入: [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。 示例 3:
输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
java
class Solution {
public int maxProfit(int[] prices) {
if(prices.length==0||prices.length==1) return 0;
int max = 0;
for(int i =0;i<prices.length-1;i++){
if(prices[i]<prices[i+1])
max += prices[i+1]-prices[i];
}
return max;
}
}
php
class Solution { /**
* @param Integer[] $prices
* @return Integer
*/
function maxProfit($prices) {
if(count($prices)==0||count($prices)==1) return 0;
$max = 0;
for($i=0;$i<count($prices)-1;$i++) {
if($prices[$i]<$prices[$i+1]){
$max = $max+$prices[$i+1]-$prices[$i];
}
}
return $max;
}
}
算法练习之杨辉三角,杨辉三角的第 k 行,买卖股票的最佳时机的更多相关文章
- python买卖股票的最佳时机--贪心/蛮力算法简介
开始刷leetcode算法题 今天做的是“买卖股票的最佳时机” 题目要求 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更 ...
- LeetCode初级算法之数组:122 买卖股票的最佳时机 II
买卖股票的最佳时机 II 题目地址:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 给定一个数组,它的第 i ...
- 【初级算法】2.买卖股票的最佳时机 II
题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必 ...
- 算法-买卖股票的最佳时机II
01.题目分析 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格.你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票. ...
- [LeetCode] 122. 买卖股票的最佳时机ii best-time-to-buy-and-sell-stock-ii(贪心算法)
思路: 只要第二天的价格高于第一天,就进行交易.(这样的话就默认可以同一天内先卖出再买进) class Solution(object): def maxProfit(self, prices): & ...
- 算法基础_递归_求杨辉三角第m行第n个数字
问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...
- 【LeetCode-面试算法经典-Java实现】【121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)】
[121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Say you have ...
- 【Leetcode】买卖股票-贪心算法
题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必 ...
- 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
从第0行开始,输出第k行,传的参数为第几行,所以在方法中先将所传参数加1,然后将最后一行加入集合中返回. 代码如下: public static List<Integer> generat ...
随机推荐
- 通俗理解word2vec的训练过程
https://www.leiphone.com/news/201706/eV8j3Nu8SMqGBnQB.html https://blog.csdn.net/dn_mug/article/deta ...
- 代码编辑器与IDE(集成开发环境)
编辑器就是轻量级的只用于编辑代码: nodepad++, sublime, ...... IDE就是包含很多例如调试, 编译,UI界面的功能更为完善的软件: Pycharm(python用的多), V ...
- Java代码写PDF-保全批单
前言:最近自己要开发一个保全批单模块,由于自己在平时没有怎么接触过批单类型模块,甲方给了自己一套word模板,自己看了一下,个险的模板比较简单,但是团险一看,自己比较蒙圈,询问需求负责人说word中的 ...
- BM算法【实数模板】
BM递推杜教版是在整数取模的情况下的, 这个可以求解实数系数,但是可能有精度误差. 若一个问题的结论是通过推线性递推式来解,考虑到实际的情况,可以用BM算法的模板,先输入项数再依次输入项,项越多越准确 ...
- JSON和计算机网络的个人总结
JSON JSON是什么? JSON:JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于ECMAScript (欧洲计算机协会制定的js规范) ...
- S1_搭建分布式OpenStack集群_08 网络服务(neutron)安装部署
一.数据库配置(控制节点)创建数据库以及用户:# mysql -uroot -p12345678MariaDB [(none)]> CREATE DATABASE neutron;MariaDB ...
- WinDbg常用命令系列---检查符号X
x (Examine Symbols) x命令在所有与指定模式匹配的上下文中显示符号. x [Options] Module!Symbol x [Options] * 参数: Options特定符号搜 ...
- Nodejs中的路径问题
一.path核心模块 ①path.basename(path[,ext])获取一个路径中的文件名 var path=require('path'); console.log(path.basename ...
- CSS行内元素
一.典型代表 span a ,strong em del, ins 二.特点: 在一行上显示 不能直接设置宽高 元素的宽和高就是内容撑开的宽高. <style type="text/c ...
- 洛谷 P2312 解方程 题解
P2312 解方程 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 [1,m][1,m] 内的整数解(\(n\) 和 \(m\) 均为 ...