算法奇妙屋(五十二)-备战+复习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;
    }
}
相关推荐
liangbo77 分钟前
JVM规范第 4 章:class 文件格式
java·jvm
橘子汽水1688 分钟前
Leetcode 236,437:二叉树的最近公共祖先,路径总和III
java·数据结构
数据狐(Datafox)15 分钟前
1688商品详情API技术解析与落地应用(含标准 JSON 示例)
java·数据库·json
M78佐菲16 分钟前
Linux学习笔记:进程回收、exec函数簇与线程
linux·笔记·学习·算法
linux-hzh18 分钟前
百日算法修炼 · Day 18
算法
用户8132679332521 分钟前
Python 计算盘中 VWAP:为什么 1 分钟 K 线是量化工程中的高性价比选择
后端·算法·github
君顾123 分钟前
AI智能商城实战指南:从架构设计到部署落地的完整技术方案
java·开发语言·多商户
高频因子挖掘机25 分钟前
Python批量获取1000只ETF 5分钟K线:从分页到吞吐量优化的QuantDash实践
后端·算法·github
Rain的Java大神之路25 分钟前
SkyWalking从0-1部署成功实战
java·后端·架构
就叫飞六吧26 分钟前
Spring 动态注册与移除 Bean 科普
java·后端·spring