12、删除排序链表中的重复元素
给定一个已排序的链表的头
head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
输入:head = [1,1,2]
输出:[1,2[
//链表结构
public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null){
return null;
}
ListNode node = head;
while(node.next != null){
if(node.val == node.next.val){
node.next = node.next.next;
}else{
node = node.next;
}
}
return node;
}
}
13、相同的树 --- 深度优先
给你两棵二叉树的根节点
p
和q
,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的
public sttaic void dfs(TreeNode node1,TreeNode node2){
//递归的结束标志,当遍历到树的节点为空时结束当前路径的遍历,并返回true
if(node1 == null && node2 == null) return true;
//如果两个节点一个为空一个不为空则不相同
else if(node1 == null || node2 == null) return false;
//如果两节点不为空,但值不相等 也不相等
else if(node1.val != node2.val) return false;
//再比较左子树和右子树是否相等
else return dfs(node1.left,node2.left) && dfs(node1.right,node2.right);
}
14、求二叉树路径总和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。
public boolean hasPathSum(TreeNode root, int sum) {
//如果当前节点为空返回false
if (root == null) {
return false;
}
//如果不为空,但是左子节点和右子节点都为空则为叶子节点
// 最后一个叶子节点的值应该等于目标值
if (root.left == null && root.right == null) {
return sum == root.val;
}
//不满足条件就将总和减去当前节点的值,重复递归
return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
}
15、买卖股票的最佳时机 ----- 动态规划
public int maxProfit(int[] prices) {
if(prices.length <= 1){
return 0;
}
int max = 0;
int min = prices[0];
for(int i = 0;i < prices.length;i++){
max = Math.max(max,prices[i] - min);
min = Math.min(min,prices[i]);
}
return max;
}