• 力扣算法入门刷题2


    12、删除排序链表中的重复元素

    给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。

     输入:head = [1,1,2]

     输出:[1,2[

    1. //链表结构
    2. public class ListNode {
    3. * int val;
    4. * ListNode next;
    5. * ListNode() {}
    6. * ListNode(int val) { this.val = val; }
    7. * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    8. * }
    1. class Solution {
    2. public ListNode deleteDuplicates(ListNode head) {
    3. if(head == null){
    4. return null;
    5. }
    6. ListNode node = head;
    7. while(node.next != null){
    8. if(node.val == node.next.val){
    9. node.next = node.next.next;
    10. }else{
    11. node = node.next;
    12. }
    13. }
    14. return node;
    15. }
    16. }

    13、相同的树 --- 深度优先

    给你两棵二叉树的根节点 pq ,编写一个函数来检验这两棵树是否相同。

    如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的

    1. public static void dfs(TreeNode node1,TreeNode node2){
    2. //递归的结束标志,当遍历到树的节点为空时结束当前路径的遍历,并返回true
    3. if(node1 == null && node2 == null) return true;
    4. //如果两个节点一个为空一个不为空则不相同
    5. else if(node1 == null || node2 == null) return false;
    6. //如果两节点不为空,但值不相等 也不相等
    7. else if(node1.val != node2.val) return false;
    8. //再比较左子树和右子树是否相等
    9. else return dfs(node1.left,node2.left) && dfs(node1.right,node2.right);
    10. }

    14、求二叉树路径总和

    给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

    1. public boolean hasPathSum(TreeNode root, int sum) {
    2. //如果当前节点为空返回false
    3. if (root == null) {
    4. return false;
    5. }
    6. //如果不为空,但是左子节点和右子节点都为空则为叶子节点
    7. // 最后一个叶子节点的值应该等于目标值
    8. if (root.left == null && root.right == null) {
    9. return sum == root.val;
    10. }
    11. //不满足条件就将总和减去当前节点的值,重复递归
    12. return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
    13. }

    15、买卖股票的最佳时机 ----- 动态规划

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

    16、摩尔投票法(同归于尽法)求众数

    给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

    你可以假设数组是非空的,并且给定的数组总是存在多数元素。

    1. class Solution {
    2. public int majorityElement(int[] nums) {
    3. //同归于尽法
    4. //定义第一个占领场地的阵营
    5. int win = nums[0];
    6. //此时阵营实力为1
    7. int count = 1;
    8. //所有人依次闯进领地
    9. for(int i = 1; i < nums.length; i++){
    10. //发现过来的是同一阵营的,实力加一
    11. if(nums[i] == win){
    12. count++;
    13. }else if(count == 0){
    14. //如果原本占领场地的阵营挂了
    15. //下次来的人所属阵营为新的占领者
    16. win = nums[i];
    17. //实力重赋值为1
    18. count = 1;
    19. }else{
    20. //发现过来的不是同一个阵营的人一换一
    21. count--;
    22. }
    23. }
    24. //最终留下的人为赢家
    25. return win;
    26. }
    27. }

  • 相关阅读:
    HTML基础之HTML的基本结构
    if-else 优化
    基于springboot+Vue的学生实践管理平台开发
    《自然语言处理》第二次实验:机器翻译(Seq2Seq中英文翻译实验)
    一项调查研究中,测量了50个研究生的身高和体重,同时记录了他们的饮食习惯包括在过去的三个月时间内,他们吃了多少次垃圾食品,数据在‘weight.txt‘中。
    golang中常用的定义map的两种方法
    电子元器件招标采购商城:优化传统采购业务,提速企业数字化升级
    学历证书查询 易语言代码
    有源噪声控制问题讨论
    租用服务器后需要注意什么
  • 原文地址:https://blog.csdn.net/m0_56044262/article/details/127825049