算法奇妙屋(五十二)-备战+复习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;
    }
}
相关推荐
都叫我大帅哥40 分钟前
给 Java 程序员的 CSRF 攻击详解:从原理到防御实战
java
江南十四行1 小时前
Spring框架核心(上)——IoC控制反转与DI依赖注入详解
java·后端·spring
fb_123452 小时前
Linux磁盘分区从入门到实操:MBR_GPT全解析+分区工具实战指南
java·linux·gpt
码智社3 小时前
JSON 零基础到资深全体系教程
java·json
AndrewHZ3 小时前
【LLM技术全景】阶段总结:技术原理篇核心知识回顾
人工智能·深度学习·算法·语言模型·大模型·llm·芯片开发
小星星闪亮登场4 小时前
2026萌新联赛第三场-- (郑州轻工业大学)
数据结构·c++·经验分享·算法·贪心算法·排序算法·深度优先
wgego4 小时前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
冻柠檬飞冰走茶4 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
机建狂魔4 小时前
Codex 接入第三方模型 API 实战:以 Mimo 为例
java·服务器·数据库·ai·ai编程·codex
玖玥拾4 小时前
LeetCode 88 合并两个有序数组
算法·leetcode