1、股票(一次交易)
根本用不上什么动态规划,直接遍历数组,然后找到最低价格,然后在后面减去最低价格,得到利润和最大利润进行比较,实现对最大的利润的更新,总之就是在遍历的过程中不断更新最小价格和最大利润。
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个有序链表
合并k个有序链表,还是一步步的实现,先写出两个链表合并的函数,然后在遍历k个有序链表,依次进行合并。两个有序链表的合并一定要熟练:有几个关键点:
- 要设置一个伪头结点
- 在实现一个节点的连接之后要更新当前节点
- 在跳出循环之后,需要判断还有那个链表没有遍历完,需要将这个没有遍历完的链表添加到尾部。
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.