算法奇妙屋(五十二)-备战+复习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;
    }
}
相关推荐
未秃头的程序猿3 小时前
Java 26正式发布!这3个新特性,让代码量直接减半
java·后端·面试
用户298698530144 小时前
Word 文档文本查找与替换的 Java 实现方案
java·后端
阿哉4 小时前
Nacos 服务发现源码:藏在背后的两套事件机制,90%的人只讲了一半
java
05Kevin4 小时前
lk每日冒险题--数据结构6.27
算法
咖啡八杯4 小时前
GoF设计模式——命令模式
java·设计模式·架构
AI人工智能_电脑小能手4 小时前
【大白话说Java面试题 第125题】【并发篇】第25题:说说 Java 线程的中断机制
java·后端·面试
Java内核笔记4 小时前
Spring Security 源码解析(六)无状态 JWT 实践:Session 共享与自定义过滤器
java·后端
荣码4 小时前
LangGraph多Agent协作:3个Agent干活比1个强,但我踩了4个坑
java·python
唐青枫6 小时前
Java 虚拟线程实战指南:从 Thread API 到 Spring Boot 高并发应用
java