算法练习之杨辉三角,杨辉三角的第 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 ...
随机推荐
- netstat -an unix socket 会阻塞吗
[lyd@localhost ~]$ netstat -an | grep "SOFO"unix 2 [ ACC ] SEQPACKET LISTENING 86308 @*MY- ...
- .Net Core控制台生成exe能独立运行
.Net Core控制台生成exe能独立运行,依赖文件都单独生成在一个publish文件夹里 方式一:强烈推荐,能独立运行,依赖DLL也会生成出来,支持无安装环境也能到处运行 按win+R输入cmd在 ...
- 用python做数据分析pandas库介绍之DataFrame基本操作
怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这一部分主要学习pandas中基于前面两种数据结构的基本操作. 设有DataF ...
- DATAGRID显示序号
SolidBrush b = new SolidBrush(this.dgvDetail.RowHeadersDefaultCellStyle.ForeColor); e.Gra ...
- django-模板变量forloop
在django的模板中,有forloop这一模板变量,颇似php Smarty中的foreach.customers, Smarty foreach如下: {foreach name=customer ...
- 海康相机开发(1) SDK安装和开发
1.1 安装包获取 从官网下载最新版本的MVS安装包,支持Windows xp.Windows 7.Windows 8.Windows 10的32和64位系统.安装过程默认即可. 官网下载链接:htt ...
- 关于System.ArgumentNullException异常
什么是ArgumentNullException 当将 null 引用(Visual Basic 中为 Nothing)传递到不接受其作为有效参数的方法时引发的异常. 继承 Object Except ...
- I Count Two Three(打表+排序+二分查找)
I Count Two Three 二分查找用lower_bound 这道题用cin,cout会超时... AC代码: /* */ # include <iostream> # inclu ...
- ELK教程3:logstash的部署、SpringBoot整合ELK+Filebeat
本篇文章主要讲解如下安装Logstash,logstash依赖于Java环境,首先安装Java,安装脚本如下: yum install java logstash安装 Logstash的安装脚本如下: ...
- com.netflix.client.ClientException: Load balancer does not have available server for client:xxx
重启一个web模块,刷新页面报错, 负载均衡器没有可用的服务器给客户端:在网关添加. ribbon: eureka: enabled: true