反转链表 II(链表)
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
示例 1:
输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]
示例 2:
输入:head = [5], left = 1, right = 1
输出:[5]
提示:
- 链表中节点数目为 n
- 1 <= n <= 500
- -500 <= Node.val <= 500
- 1 <= left <= right <= n
进阶: 你可以使用一趟扫描完成反转吗?
解答:
class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode pre = dummy;
for (int i = 1; i < m; i++) {
pre = pre.next;
}
head = pre.next;
for (int i = m; i < n; i++) {
ListNode nex = head.next;
head.next = nex.next;
nex.next = pre.next;
pre.next = nex;
}
return dummy.next;
}
}
通配符匹配(贪心、递归)
给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '' 的通配符匹配。 '?' 可以匹配任何单个字符。'' 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明:
- s 可能为空,且只包含从 a-z 的小写字母。
- p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。
示例 1:
输入:s = "aa"p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。
示例 2:
输入:s = "aa"p = "*"
输出: true
解释: '*' 可以匹配任意字符串。
示例 3:
输入:s = "cb"p = "?a"
输出: false
解释: '?' 可以匹配 'c', 但第二个 'a' 无法匹配 'b'。
示例 4:
输入:s = "adceb"p = "*a*b"
输出: true
解释: 第一个 '*' 可以匹配空字符串, 第二个 '*' 可以匹配字符串 "dce".
示例 5:
输入:s = "acdcb"p = "a*c?b"
输出: false
以下程序实现了这一功能,请你填补空白处内容:
class Solution {
public boolean isMatch(String s, String p) {
boolean[][] value = new boolean[p.length() + 1][s.length() + 1];
value[0][0] = true;
for (int i = 1; i <= s.length(); i++) {
value[0][i] = false;
}
for (int i = 1; i <= p.length(); i++) {
if (p.charAt(i - 1) == '*') {
value[i][0] = value[i - 1][0];
for (int j = 1; j <= s.length(); j++) {
value[i][j] = (value[i][j - 1] || value[i - 1][j]);
}
} else if (p.charAt(i - 1) == '?') {
value[i][0] = false;
for (int j = 1; j <= s.length(); j++) {
value[i][j] = value[i - 1][j - 1];
}
} else {
value[i][0] = false;
for (int j = 1; j <= s.length(); j++) {
____________________;
}
}
}
return value[p.length()][s.length()];
}
}
解答:
value[i][j] = s.charAt(j - 1) == p.charAt(i - 1) && value[i - 1][j - 1];
求输入数字的平均值、最大值(算法初阶、最小值和最大值)
输入若干个数,设输入的第一个数n为后面要输入的数的个数,求平均值及最大值,并在屏幕输出来
解答:
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("输入n:");
int n=in.nextInt();
int temp,max=0,sum=0;
for(int i=0;i<n;i++){
temp=in.nextInt();
if (temp>max){
max=temp;
}
sum+=temp;
}
System.out.println("最大值为:"+max+",平均值为:"+sum*1.0/n);
}
}
本文内容到此结束了, 如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。 如有错误❌疑问💬欢迎各位大佬指出。 主页:共饮一杯无的博客汇总👨💻
保持热爱,奔赴下一场山海。🏃🏃🏃