算法奇妙屋(五十二)-备战+复习2

文章目录

一. 牛客 NC23 划分链表

1. 题目

题目意思已经很明确, 这里不过多赘述

2. 算法原理

  1. 定义六个变量:
    cur -> 表示遍历到原链表当前节点
    curNext -> 表示遍历到原链表下一个节点
    headMin -> 表示新的小于x链表的头结点
    headMax -> 表示新的大于等于x链表的头结点
    curMin -> 小于x链表的当前节点
    curMax -> 大于等于x链表的当前节点
  2. 通过赋值与修改 next 域, 来达到最终结果

3. 代码

java 复制代码
import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @param x int整型 
     * @return ListNode类
     */
    public ListNode partition (ListNode head, int x) {
        ListNode cur = head;
        ListNode headMin = new ListNode(-1);
        ListNode curMin = null;
        ListNode headMax = new ListNode(-1);
        ListNode curMax = null;
        while (cur != null) {
            ListNode curNext = cur.next;
            cur.next = null;
            if (cur.val < x) {
                if (curMin == null) {
                    curMin = cur;
                    headMin.next = curMin;
                }else {
                    curMin.next = cur;
                    curMin = curMin.next;
                }
            }else {
                if (curMax == null) {
                    curMax = cur;
                    headMax.next = curMax;
                }else {
                    curMax.next = cur;
                    curMax = curMax.next;
                }
            }
            cur = curNext;
        }
        if (curMin != null) {
            curMin.next = headMax.next;
            return headMin.next;
        }else {
            return headMax.next;
        }
    }
}

二. 牛客 NC18 顺时针旋转矩阵

1. 题目

2. 算法原理

这道题画图出来还是很好理解的

3. 代码

java 复制代码
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param mat int整型二维数组
     * @param n int整型
     * @return int整型二维数组
     */
    public int[][] rotateMatrix (int[][] mat, int n) {
        // 1.对调,获取翻转逆置矩阵
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i; j++) {
                int t = mat[i][j];
                mat[i][j] = mat[j][i];
                mat[j][i] = t;
            }
        }
        // 2.对逆置矩阵进行每行逆置
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n / 2; j++) {
                int t = mat[i][j];
                mat[i][j] = mat[i][n - 1 - j];
                mat[i][n - 1 - j] = t;
            }
        }
        return mat;
    }
}
相关推荐
ttod_qzstudio5 小时前
【软考算法】软件设计师下午第四题算法总纲:从“直接放弃“到“稳稳拿分“
算法·软考
han_hanker5 小时前
mybatis-plus 常用方法
java·tomcat·mybatis
广州灵眸科技有限公司6 小时前
xfce桌面旋转说明:基于灵眸科技EASY-EAI-Nano-TB
网络·网络协议·tcp/ip·算法·php
长不胖的路人甲6 小时前
CAS讲解
java
得物技术6 小时前
从"机械应答"到"服务伙伴":得物高可控智能客服的 Agent 工程实践|AICon 演讲整理
算法·llm·agent
想要成为糕糕手6 小时前
NO.48 旋转图像 —— LeetCode 热题 100 面试导向深度解析
javascript·算法·面试
我是唐青枫6 小时前
Java SLF4J 实战指南:从日志门面到 Logback、MDC 和链路追踪
java·开发语言·logback
XS0301066 小时前
JavaEE 核心知识
java·java-ee
JieE2126 小时前
LeetCode 138 随机链表的复制|两种解法详解(哈希表 + 原地 O (1) 空间)
javascript·算法·面试
专注于ai算法的踩坑小达人6 小时前
时序预测主流模型综述
算法·lstm