• 7天带你全方位刷爆数据结构与算法,每天一道,高效刷题


    前言

    很多算法小白初期刷题比较迷茫,不知道从何刷起从何入手,也不知道怎么使用LeetCode,这篇带你高效使用力扣,让刷题进大厂的路上不再迷茫!

    1、反转链表

    反转一个单链表:

    输入: 1->2->3->4->5 
    输出: 5->4->3->2->1
    

    方法1:

    迭代,重复某一过程,每一次处理结果作为下一次处理的初始值,这些初始值类似于状态、每次处理都会改变状态、直至到达最终状态。

    从前往后遍历链表,将当前节点的next指向上一个节点,因此需要一个变量存储上一个节点prev,当前节点处理完需要寻找下一个节点,因此需要一个变量保存当前节点curr,处理完后要将当前节点赋值给prev,并将next指针赋值给curr,因此需要一个变量提前保存下一个节点的指针next。

    1、将下一个节点指针保存到next变量 next = curr.next

    2、将下一个节点的指针指向prev,curr.next = prev

    3、准备处理下一个节点,将curr赋值给prev

    4、将下一个节点赋值为curr,处理一个节点

    方法2:

    递归:以相似的方法重复,类似于树结构,先从根节点找到叶子节点,从叶子节点开始遍历大的问题(整个链表反转)拆成性质相同的小问题(两个元素反转)curr.next.next = curr将所有的小问题解决,大问题即解决

    只需每个元素都执行curr.next.next = curr,curr.next = null两个步骤即可

    为了保证链不断,必须从最后一个元素开始

    public class ReverseList {
    static class ListNode{
    int val;
    ListNode next;
    public ListNode(int val, ListNode next) {
    this.val = val;
    this.next = next;
    }
    }
    public static ListNode iterate(ListNode head){
    ListNode prev = null,curr,next;
    curr = head;
    while(curr != null){
    next = curr.next;
    curr.next = prev;
    prev = curr;
    curr = next;
    }
    return prev;
    }
    public static ListNode recursion(ListNode head) {
    if (head == null || head.next == null) {
    return head;
    }
    ListNode newHead = recursion(head.next);
    head.next.next = head;
    head.next = null;
    return newHead;
    }
    public static void main(String[] args) {
    ListNode node5 = new ListNode(5,null);
    ListNode node4 = new ListNode(4,node5);
    ListNode node3 = new ListNode(3,node4);
    ListNode node2 = new ListNode(2,node3);
    ListNode node1 = new ListNode(1,node2);
    //ListNode node = iterate(node1);
    ListNode node_1 = recursion(node1);
    System.out.println(node_1);
    }
    }
    

    2、统计N以内的素数

    3、寻找数组的中心索引

    4、删除排序数组中的重复项

    5、x的平方根

    6、三个数的最大乘积

    7、两数之和

    8、斐波那契数列

    9、环形链表

    10、排列硬币

    11、合并两个有序数组

    12、子数组最大平均数

    13、二叉树的最小深度

    14、最长连续递增序列

    15、柠檬水找零

    16、三角形的最大周长

    17、二叉树遍历

    18、省份数量

    19、预测赢家

    20、香槟塔

    21、井字游戏

    22、打家劫舍

    23、优势洗牌

    24、Dota2参议院

    算法笔记及代码文档2022力扣算法笔记合集

  • 相关阅读:
    用css3实现一个带缺口的圆圈(图)
    markdown语法练习
    Android SDK + Appium 环境搭建
    Python + Robot Framework 环境搭建
    javascript动画效果之透明度
    javascript动画效果之匀速运动
    JS中offsetTop、clientTop、scrollTop、offsetTop各属性介绍(转载)
    javascript焦点图自动播放
    js中的随机数
    javascript焦点图(根据图片下方的小框自动播放)
  • 原文地址:https://www.cnblogs.com/QLCZ/p/16359727.html
Copyright © 2020-2023  润新知