1. 杨辉三角

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

在杨辉三角中,每个数是它左上方和右上方的数的和。

  1. 示例:
  2. 输入:
  3. 输出:
  4. [
  5. [],
  6. [,],
  7. [,,],
  8. [,,,],
  9. [,,,,]
  10. ]

java

  1. class Solution {
  2. public List<List<Integer>> generate(int numRows) {
  3. List<List<Integer>> rs = new ArrayList<List<Integer>>();
  4. List<Integer> prior = null;
  5. for(int i=1;i<=numRows;i++){
  6. List<Integer> tmp = new ArrayList<>();
  7. for(int j=0;j<i;j++){
  8. if(j==0||j==i-1){
  9. tmp.add(1);
  10. }else{
  11. tmp.add(prior.get(j-1)+prior.get(j));
  12. }
  13. }
  14. rs.add(tmp);
  15. prior = tmp;
  16. }
  17. return rs;
  18. }
  19. }

php

  1. class Solution {
  2.  
  3. /**
  4. * @param Integer $numRows
  5. * @return Integer[][]
  6. */
  7. function generate($numRows) {
  8. $rs = [];
  9. for($i=1;$i<=$numRows;$i++){
  10. $tmp = [];
  11. for($j=0;$j<$i;$j++){
  12. if($j==0||$j==$i-1){
  13. array_push($tmp,1);
  14. }else{
  15. array_push($tmp,$rs[$i-2][$j-1]+$rs[$i-2][$j]);
  16. }
  17. }
  18. array_push($rs,$tmp);
  19. }
  20. return $rs;
  21. }
  22. }

2.杨辉三角的第 

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 行。

  1. 示例:
  2. 输入: 3
  3. 输出: [1,3,3,1]

直接使用组合公式

  1. C(n,i) = n!/(i!*(n-i)!)

则第(i+1)项是第i项的倍数=(n-i)/(i+1);

java

  1. class Solution {
  2. public List<Integer> getRow(int rowIndex) {
  3. List<Integer> rs= new ArrayList<>();
  4. long m = 1;
  5. for(int i=0;i<=rowIndex;i++){
  6. rs.add((int)m);
  7. m = m*(rowIndex-i)/(i+1);
  8. }
  9. return rs;
  10. }
  11. }

注:

  m不能为int,会发生溢出

php

  1. class Solution {
  2.  
  3. /**
  4. * @param Integer $rowIndex
  5. * @return Integer[]
  6. */
  7. function getRow($rowIndex) {
  8. $m = 1;
  9. $rs = [];
  10. for($i=0;$i<=$rowIndex;$i++){
  11. array_push($rs,(int)$m);
  12. $m = $m*($rowIndex-$i)/($i+1);
  13. }
  14. return $rs;
  15. }
  16. }

3.买卖股票的最佳时机

(1)给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

  1. 示例 1:
  2. 输入: [7,1,5,3,6,4]
  3. 输出: 5
  4. 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5
  5. 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。
  6.  
  7. 示例 2:
  8. 输入: [7,6,4,3,1]
  9. 输出: 0
  10. 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0

java

  1. class Solution {
  2. public int maxProfit(int[] prices) {
  3. if(prices.length==0) return 0;
  4. int min = prices[0];
  5. int max = 0;
  6. for(int i=1;i<prices.length;i++){
  7. if(prices[i]<min){
  8. min = prices[i];
  9. }else if(prices[i]-min>max){
  10. max = prices[i]-min;
  11. }
  12. }
  13. return max;
  14. }
  15. }

php

  1. class Solution {
  2.  
  3. /**
  4. * @param Integer[] $prices
  5. * @return Integer
  6. */
  7. function maxProfit($prices) {
  8.  
  9. $min = max($prices);
  10. $max = 0;
  11. foreach ($prices as $key => $value) {
  12. if($value<$min){
  13. $min = $value;
  14. }else if($value-$min>$max){
  15. $max = $value-$min;
  16. }
  17. }
  18. return $max;
  19. }
  20. }

(2)给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:不能同时参与多笔交易(必须在再次购买前出售掉之前的股票)。

  1. 示例 1:
  2. 输入: [7,1,5,3,6,4]
  3. 输出: 7
  4. 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4
  5. 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3
  6.  
  7. 示例 2:
  8. 输入: [1,2,3,4,5]
  9. 输出: 4
  10. 解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4
  11. 注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
  12. 因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
  13.  
  14. 示例 3:
  15. 输入: [7,6,4,3,1]
  16. 输出: 0
  17. 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0

java

  1. class Solution {
  2. public int maxProfit(int[] prices) {
  3. if(prices.length==0||prices.length==1) return 0;
  4. int max = 0;
  5. for(int i =0;i<prices.length-1;i++){
  6. if(prices[i]<prices[i+1])
  7. max += prices[i+1]-prices[i];
  8. }
  9. return max;
  10. }
  11. }

php

  1. class Solution {
  2.  
  3. /**
  4. * @param Integer[] $prices
  5. * @return Integer
  6. */
  7. function maxProfit($prices) {
  8. if(count($prices)==0||count($prices)==1) return 0;
  9. $max = 0;
  10. for($i=0;$i<count($prices)-1;$i++) {
  11. if($prices[$i]<$prices[$i+1]){
  12. $max = $max+$prices[$i+1]-$prices[$i];
  13. }
  14. }
  15. return $max;
  16. }
  17. }

算法练习之杨辉三角,杨辉三角的第 k 行,买卖股票的最佳时机的更多相关文章

  1. python买卖股票的最佳时机--贪心/蛮力算法简介

    开始刷leetcode算法题 今天做的是“买卖股票的最佳时机” 题目要求 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更 ...

  2. LeetCode初级算法之数组:122 买卖股票的最佳时机 II

    买卖股票的最佳时机 II 题目地址:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 给定一个数组,它的第 i ...

  3. 【初级算法】2.买卖股票的最佳时机 II

    题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必 ...

  4. 算法-买卖股票的最佳时机II

    01.题目分析 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格.你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票. ...

  5. [LeetCode] 122. 买卖股票的最佳时机ii best-time-to-buy-and-sell-stock-ii(贪心算法)

    思路: 只要第二天的价格高于第一天,就进行交易.(这样的话就默认可以同一天内先卖出再买进) class Solution(object): def maxProfit(self, prices): & ...

  6. 算法基础_递归_求杨辉三角第m行第n个数字

    问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...

  7. 【LeetCode-面试算法经典-Java实现】【121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)】

    [121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Say you have ...

  8. 【Leetcode】买卖股票-贪心算法

    题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必 ...

  9. 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。

    从第0行开始,输出第k行,传的参数为第几行,所以在方法中先将所传参数加1,然后将最后一行加入集合中返回. 代码如下: public static List<Integer> generat ...

随机推荐

  1. netstat -an unix socket 会阻塞吗

    [lyd@localhost ~]$ netstat -an | grep "SOFO"unix 2 [ ACC ] SEQPACKET LISTENING 86308 @*MY- ...

  2. .Net Core控制台生成exe能独立运行

    .Net Core控制台生成exe能独立运行,依赖文件都单独生成在一个publish文件夹里 方式一:强烈推荐,能独立运行,依赖DLL也会生成出来,支持无安装环境也能到处运行 按win+R输入cmd在 ...

  3. 用python做数据分析pandas库介绍之DataFrame基本操作

    怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这一部分主要学习pandas中基于前面两种数据结构的基本操作. 设有DataF ...

  4. DATAGRID显示序号

    SolidBrush b = new SolidBrush(this.dgvDetail.RowHeadersDefaultCellStyle.ForeColor);            e.Gra ...

  5. django-模板变量forloop

    在django的模板中,有forloop这一模板变量,颇似php Smarty中的foreach.customers, Smarty foreach如下: {foreach name=customer ...

  6. 海康相机开发(1) SDK安装和开发

    1.1 安装包获取 从官网下载最新版本的MVS安装包,支持Windows xp.Windows 7.Windows 8.Windows 10的32和64位系统.安装过程默认即可. 官网下载链接:htt ...

  7. 关于System.ArgumentNullException异常

    什么是ArgumentNullException 当将 null 引用(Visual Basic 中为 Nothing)传递到不接受其作为有效参数的方法时引发的异常. 继承 Object Except ...

  8. I Count Two Three(打表+排序+二分查找)

    I Count Two Three 二分查找用lower_bound 这道题用cin,cout会超时... AC代码: /* */ # include <iostream> # inclu ...

  9. ELK教程3:logstash的部署、SpringBoot整合ELK+Filebeat

    本篇文章主要讲解如下安装Logstash,logstash依赖于Java环境,首先安装Java,安装脚本如下: yum install java logstash安装 Logstash的安装脚本如下: ...

  10. com.netflix.client.ClientException: Load balancer does not have available server for client:xxx

    重启一个web模块,刷新页面报错, 负载均衡器没有可用的服务器给客户端:在网关添加. ribbon: eureka: enabled: true