NC01--股票(一次交易)、合并k个有序链表、字符串的排列、接雨水问题、输出二叉树的右视图

本文介绍了五个经典的算法问题:股票一次交易求最大利润,合并k个有序链表,字符串排列,接雨水问题以及输出二叉树的右视图。针对每个问题,提供了思路解析和解题链接,帮助读者理解和掌握这些算法的解决方法。
摘要由CSDN通过智能技术生成

1、股票(一次交易)

https://www.nowcoder.com/practice/64b4262d4e6d4f6181cd45446a5821ec?tpId=117&&tqId=37717&rp=1&ru=/activity/oj&qru=/ta/job-code-high/question-ranking

根本用不上什么动态规划,直接遍历数组,然后找到最低价格,然后在后面减去最低价格,得到利润和最大利润进行比较,实现对最大的利润的更新,总之就是在遍历的过程中不断更新最小价格和最大利润。

import java.util.*;


public class Solution {
   
    /**
     * 
     * @param prices int整型一维数组 
     * @return int整型
     */
    public int maxProfit (int[] prices) {
   
        // write code here
        int minPrice = Integer.MAX_VALUE;
        int maxProfit = 0;
        for(int i = 0; i < prices.length; i++){
   
            if(minPrice > prices[i]){
   
                minPrice = prices[i];
            }else{
   
                maxProfit = Math.max(maxProfit, prices[i] - minPrice);
            }
        }
        return maxProfit;
    }
}

2、合并k个有序链表

https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6?tpId=117&&tqId=37747&rp=1&ru=/activity/oj&qru=/ta/job-code-high/question-ranking

合并k个有序链表,还是一步步的实现,先写出两个链表合并的函数,然后在遍历k个有序链表,依次进行合并。两个有序链表的合并一定要熟练:有几个关键点:

  1. 要设置一个伪头结点
  2. 在实现一个节点的连接之后要更新当前节点
  3. 在跳出循环之后,需要判断还有那个链表没有遍历完,需要将这个没有遍历完的链表添加到尾部。
import java.util.*;
public class Solution {
   
    public ListNode mergeKLists(ArrayList<ListNode> lists) {
   
        ListNode ans = null;
        for (int i = 0; i < lists.size(); ++i) {
   
            ans = mergeTwo(ans, lists.get(i));
        }
        return ans;
    }
    private ListNode mergeTwo(ListNode l1, ListNode l2){
   
        ListNode headNode = new ListNode(-1);
        ListNode prev = headNode;
        while(l1 != null && l2 != null){
   
            if(l1.val >= l2.val){
   
                prev.next = l2;
                l2 = l2.next;
            }else{
   
                prev.next = l1;
                l1 = l1.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值