IE盒子

搜索
查看: 78|回复: 0

【简单版】【Java语言刷Leetcode一5道题】Day2

[复制链接]

4

主题

9

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2023-4-9 19:09:36 | 显示全部楼层 |阅读模式

  •   作者:烧洋芋的土豆
  •   内容:使用Java语言刷Leetcode算法题
  •    技术交流:分享日常学习知识,平常遇到的问题,一些学习资料,一起学习,一起进步。


<hr/>
  2. 合并两个有序链表

        将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:



输入:输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = [] 输出:[]
示例 3:
输入:l1 = [], l2 = [0] 输出:[0]
提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1 和 l2 均按 非递减顺序 排列

代码和结果图如下:
/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode() {}
*     ListNode(int val) { this.val = val; }
*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) return l2;
        if (l2 == null) return l1;
      ListNode res=  l1.val < l2.val ? l1:l2;
      res.next=mergeTwoLists(res.next, l1.val >= l2.val ? l1 : l2);
      return res;
    }
}



  26. 删除有序数组中的重复项

       给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。        由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
判题标准: 系统会用下面的代码来测试你的题解:
int[] nums = [...]; // 输入数组
int[] expectedNums = [...]; // 长度正确的期望答案

int k = removeDuplicates(nums); // 调用

assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
    assert nums == expectedNums;
}如果所有断言都通过,那么您的题解将被 通过。
示例 1:
输入:nums = [1,1,2] 输出:2, nums = [1,2,_] 解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。

示例 2:
输入:nums = [0,0,1,1,1,2,2,3,3,4] 输出:5, nums = [0,1,2,3,4] 解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。
提示:

  • 1 <= nums.length <= 3 * 104
  • -104 <= nums <= 104
  • nums 已按 升序 排列

代码和结果图如下:
class Solution {
    public int removeDuplicates(int[] nums) {
        int p=0,q=1;
        while (q<nums.length) {
            if (nums[p] == nums[q]) {
                q++;
            } else {
                nums[++p] = nums[q++];
            }
        }
        return p+1;
    }
}



  27. 移除元素

       给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下:
// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
int len = removeElement(nums, val);
// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {
    print(nums);
}示例 1:
输入:nums = [3,2,2,3], val = 3 输出:2, nums = [2,2] 解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。
示例 2:
输入:nums = [0,1,2,2,3,0,4,2], val = 2 输出:5, nums = [0,1,4,0,3] 解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。
提示:

  • 0 <= nums.length <= 100
  • 0 <= nums <= 50
  • 0 <= val <= 100

代码和结果图如下:
class Solution {
    public int removeElement(int[] nums, int val) {
          int count=0;
        for (int i = 0; i < nums.length; i++) {
            if(nums!=val){
                nums[count]=nums;
                count+=1;
            }
        }
        return count;
    }
}



  35. 搜索插入位置

       给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5 输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2 输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7 输出: 4
提示:

  • 1 <= nums.length <= 104
  • -104 <= nums <= 104
  • nums 为 无重复元素 的 升序 排列数组
  • -104 <= target <= 104

代码和结果图如下:
class Solution {
    public int searchInsert(int[] nums, int target) {
        int len=nums.length;
        for (int i = 0; i < len; i++) {
            if(nums>=target){
                return i;
            }
        }
        return len;
    }
}



  58. 最后一个单词的长度

       给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = "Hello World" 输出:5 解释:最后一个单词是“World”,长度为5。 示例 2:
示例 2:
输入:s = "   fly me   to   the moon  " 输出:4 解释:最后一个单词是“moon”,长度为4。
示例 3:
输入:s = "luffy is still joyboy" 输出:6 解释:最后一个单词是长度为6的“joyboy”。
提示:

  • 1 <= s.length <= 104
  • s 仅有英文字母和空格 ' ' 组成
  • s 中至少存在一个单词

代码和结果图如下:
class Solution {
    public int lengthOfLastWord(String s) {
        s = s.trim();
        int end = s.lastIndexOf(" ") + 1;
        int length = s.substring(end).length();
        return length;
    }
}



<hr/>
  总结

       这几道算法题主要是采用Java基础遍历和链表,字符串的功能知识来实现的,比较简单,这是刷leetcode的第二天,希望大家多多鼓励,让我们一起坚持下来,一起加油 ! ! !
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表