欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > LeetCode 619, 58, 24

LeetCode 619, 58, 24

2025/4/20 4:55:22 来源:https://blog.csdn.net/qq_61350148/article/details/139668280  浏览:    关键词:LeetCode 619, 58, 24

目录

  • 619. 只出现一次的最大数字
    • 题目链接
    • 要求
    • 知识点
    • 思路
    • 代码
      • 使用where限制:
      • 使用having限制:
  • 58. 最后一个单词的长度
    • 题目链接
    • 标签
    • Java.split()
      • 思路
      • 代码
    • 不使用Java的API
      • 思路
      • 代码
  • 24. 两两交换链表中的节点
    • 题目链接
    • 标签
    • 要求
    • 思路
    • 代码

619. 只出现一次的最大数字

题目链接

619. 只出现一次的最大数字

  • MyNumbers的字段为num

要求

  • 找出最大的 单一数字 。如果不存在 单一数字 ,则返回 null

知识点

  1. max():取最大值函数。如果一个值都没有,则返回null
  2. count():统计个数的函数。
  3. group by:按照某些字段进行分组。
  4. having:分组后限制的条件,类似于 where ,但必须放在 group by 之后。

思路

要找到单一数字,就得对每个数字的个数进行统计,然后找到出现个数为1的数字们,取它们的最大值作为结果,如果没有一个出现次数为1的数字,则可以利用 max() 的特性返回 null

代码

使用where限制:

selectmax(num) num
from(selectnum,count(*) timesfromMyNumbersgroup bynum) c
wheretimes = 1

使用having限制:

selectmax(num) num
from(selectnumfromMyNumbersgroup bynumhavingcount(*) = 1) c

58. 最后一个单词的长度

题目链接

58. 最后一个单词的长度

标签

字符串

Java.split()

思路

众所周知,在 J a v a Java Java 中有一个很好的函数,它能按照某个字符串对原字符串进行分割,它就是 S t r i n g String String 中的 s p l i t ( ) split() split() 方法,注意:它会保留空串,例如" hello world".split(" ")将会返回 [ " " , " h e l l o " , " w o r l d " ] ["", "hello", "world"] ["","hello","world"] ,你没有看错,它保留了空串,返回了3个字符串。

代码

class Solution {public int lengthOfLastWord(String s) {String[] strings = s.split(" ");return strings[strings.length - 1].length();}
}

不使用Java的API

思路

对于求最后一个单词的长度,可以从最后一个不为空格的字符开始计数,直到遇到空格,然后返回这个统计的数即可。

代码

class Solution {public int lengthOfLastWord(String s) {char[] str = s.toCharArray();// 先遍历到最后一个单词的最后一个字符,去除空格int i = str.length - 1;while (i >= 0 && str[i] == ' ') {i--;}// 统计最后一个单词的字符数int cnt = 0;while (i >= 0) {if (str[i] == ' ') {break;}cnt++;i--;}return cnt;}
}

24. 两两交换链表中的节点

题目链接

24. 两两交换链表中的节点

标签

递归 链表

要求

  • 你必须在 不修改节点内部的值 的情况下完成本题(即,只能进行节点交换)

思路

先说明几个概念,左节点:待交换的两个节点中的左节点右节点:待交换的两个节点中的右节点前指针:指向待交换的两个节点的指针(为什么需要前指针?因为交换节点不止是两个节点之间的互换,还需要让前指针的指向从 指向左节点 变为 指向右节点。这一点很重要)。

交换节点分为四步:第一步,让前指针指向右节点;第二步,让左节点指向原本右节点指向的节点;第三步,让右节点指向左节点;第四步,更新前指针到左指针处(因为下一轮交换的是交换后的左指针的 下一个节点 和 下下一个节点)。

本题依旧采用 哨兵节点指向链表头节点 的方式,因为前指针一开始得指向链表的头节点

代码

class Solution {public ListNode swapPairs(ListNode head) {ListNode sentinel = new ListNode(-1, head); // 哨兵指针,它指向链表的头节点ListNode prev = sentinel; // 前指针,它指向待交换的两个节点的左节点while (prev.next != null && prev.next.next != null) {ListNode left = prev.next;ListNode right = prev.next.next;prev.next = right; // 让前指针指向右节点left.next = right.next; // 让左节点指向原本右节点指向的节点right.next = left; // 让右节点指向左节点prev = left; // 更新前指针到左指针处}return sentinel.next;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词