058.螺旋矩阵
54.螺旋矩阵给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
思路:
遍历顶部top++
遍历右部right--
遍历底部down--
遍历左部left++
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960package com.wereash.scut_hot100.matrix;import java.util.ArrayList;import java.util.List;import java.util.Scanner;/** * @Author: WereAsh * @Date:2026-02-03 20:44 **/public class Solution054 { public static void main(String[] args){ Scanner scanner=new Scanner(Syst ...
048.旋转图像
48.旋转图像给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在** 原地** 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
思路:
先转置
在中心轴对称交换
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657package com.wereash.scut_hot100.matrix;import java.util.Scanner;/** * @Author: WereAsh * @Date:2026-02-02 19:59 **/public class Solution048 { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); int n=scanner.nextI ...
072.矩阵置零
73.矩阵置零给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地算法。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455package com.wereash.scut_hot100.count;import java.util.Scanner;/** * @Author: WereAsh * @Date:2026-02-01 19:28 **/public class Solution072 { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); System.out.print("请输入矩阵的维度:"); int n=scanner.nextInt(); scanner. ...
142.环形链表Ⅱ
142.环形链表Ⅱ给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
思路:
第一次快慢指针找到相遇位置后
快指针步伐调成1步,慢指针从head从头开始走,
会在若干步后再次相遇,这次的相遇就是入环点
1234567891011121314151617181920212223242526272829/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * ...
045.跳跃游戏Ⅱ
45.跳跃游戏Ⅱ给定一个长度为 n 的 0 索引整数数组 nums。初始位置在下标 0。
每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在索引 i 处,你可以跳转到任意 (i + j) 处:
0 <= j <= nums[i] 且
i + j < n
返回到达 n - 1 的最小跳跃次数。测试用例保证可以到达 n - 1。
思路
走到当前位置,记录下当前位置能到达的最大距离
边界值end,如果当前位置等于end,则更新最大距离
总次数++,表示已到达上一个位置能到的最大距离
123456789101112131415class Sulution{ public int jump(int[] nums){ int maxPos=0; int end=0; int ans=0; for(int i=0;i<nums.length;i++){ maxPos=Math.max(maxPos,nums[i]+i); ...
055.跳跃游戏
55.跳跃游戏给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。
思路
不断更新当前位置能够跳到的最远距离
1234567891011class Solution{ public boolean canJump(int[] nums){ int maxJump=nums[0]; for(int i=0;i<=maxJump;i++){ maxJump=Math.max(maxJump,nums[i]+i); if(maxJump>=nums.length-1) return true; } return false; }}
121.卖出股票的最佳时机
121.卖出股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
思路
简单来说就是,何时买入股票,合适卖出股票
得出利润的最大值
买入要在卖出之前
贪心
123456789101112131415161718192021222324252627package com.wereash.scut_hot100.tanxin;import java.util.Scanner;/** * @Author: WereAsh * @Date:2026-01-29 20:35 **/public class Solution121 { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); ...
140.环形链表
140.环形链表给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。
思路
快慢指针
快慢指针相遇,则链表一定存在环
1234567891011121314public class Solution { public boolean hasCycle(ListNode head) { ListNode fast=head; ListNode slow=head; while(fast.next.next!=null&&slow.next!=null){ fast=fast.next.next; slow=slow.next; ...
70.爬楼梯
70.爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
思路
爬到第n阶的方法,就是爬到n-1阶+n-2阶的方法的和
1234567891011121314151617181920212223242526package com.wereash.scut_hot100;import java.util.Scanner;/** * @Author: WereAsh * @Date:2026-01-27 19:05 **/public class Solution070 { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); if(n==1){ System.out.println("共有1种不同的爬法"); retur ...
最大子数组和
53.最大子数组和给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组是数组中的一个连续部分。
思路
动态规划基础题,前缀和
要么前缀和+当前元素,要么不加
重新开始计算前缀和
1234567891011121314151617181920212223242526package com.wereash.scut_hot100;import java.util.Scanner;/** * @Author: WereAsh * @Date:2026-01-26 19:42 **/public class Solution053 { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); String[] str=scanner.nextLine().split(","); int n=str.length; int[] nu ...







