当前位置:   article > 正文

java——力扣刷题小结_01_力扣怎么刷java题

力扣怎么刷java题

1、最大子数组和:
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。

示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:
输入:nums = [1]
输出:1
示例 3:
输入:nums = [5,4,-1,7,8]
输出:23
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-subarray

class Solution {
    public int maxSubArray(int[] nums) {
        int ans = nums[0];
        int sum = 0;
        for(int num: nums) {
            if(sum > 0) {
            //只要sum还没有小于0,就还有希望成为最大值
                sum += num;    //有效状态
            } else {
            //当sum<=0了,说明有两种情况,一种是刚开始记录,另一种就
            //是出现了极大负值或者连续负值使连续和小于等于0,那么这个
            //连续和目前无法再次成为最大和,重新开始记录并寻找
                sum = num;    //无效状态
            }
            //不断比较每次的最大值和历史最大值的大小
            ans = Math.max(ans, sum);    //使用ans记录最值
        }
        return ans;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2、只出现一次的数字
在这里插入图片描述

个人解法,暴力遍历:

class Solution {
    public int singleNumber(int[] nums) {
        Arrays.sort(nums);
        for(int i = 0;i < nums.length-2;i+=2){
            if(nums[i]!=nums[i+1]){
                return nums[i];
            }
        }
        return nums[nums.length-1];
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

官方解法,利用异或运算

class Solution {
    public int singleNumber(int[] nums) {
        int single = 0;
        for (int num : nums) {
            single ^= num;
        }
        return single;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3、合并两个有序链表:
在这里插入图片描述

1、迭代法

/**
 * 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 list1, ListNode list2) {
        ListNode prehead = new ListNode(-1);

        ListNode prev = prehead;
        while (l1 != null && l2 != null) {
        //比较大小选择连接的对象
            if (l1.val <= l2.val) {
                prev.next = l1;
                l1 = l1.next;
            } else {
                prev.next = l2;
                l2 = l2.next;
            }
            prev = prev.next;
        }
        //将剩余元素接入链表尾![请添加图片描述](https://img-blog.csdnimg.cn/374b9ef23b7d4e9c92dd45b4b9f7fe2d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU3RlcmJlbkExOA==,size_20,color_FFFFFF,t_70,g_se,x_16)

        prev.next = l1 == null ? l2 : l1;
        return prehead.next;

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

2、递归

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) {
            return l2;
        } else if (l2 == null) {
            return l1;
        } else if (l1.val < l2.val) {
            l1.next = mergeTwoLists(l1.next, l2);
            return l1;
        } else {
            l2.next = mergeTwoLists(l1, l2.next);
            return l2;
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/87306
推荐阅读
  • Java归并排序_归并排序java归并排序java归并排序原理1.把数组从中间划分成两个子数组;2.一直递归地把子数组划分成更小的子数组,直到子数组里面只有一个元素3.依次按照递归的返回顺序,不断地合并排好序的子数组,直到最后把整个数组的顺... [详细]

  • 思想:分而治之,先拆分后归并归并排序(MergeSort)就是利用归并的思想实现排序的方法。它的原理是假设初始序列有N个记录,则可以看成是N个有序的子序列,每个子序列的长度为1,然后两两归并,得到N/2个长度为2或1的有序子序列,再两两归并... [详细]

  • Java实现:归并排序_归并排序java归并排序java将两个有序的列表合并成一个有序的列表            &n... [详细]

  • 算法思路:将待排序的数据先一分为二,接着再将者两部分合并,合并到一个备用数组中,合并的时候对比两边数据当前的值的大小,再选择一个加入到排好序的数组中,最后将备用数组的值复制回原数组。算法如下:VoidMergeSort(inta[],int... [详细]

  • 其中,mergeSort()函数实现了归并排序的主要逻辑,而merge()函数则是用于合并两个有序数组的。在归并排序中,对两半进行递归排序后将两半有序子序列合并即可得到排好序的数组。归并排序是一种经典的排序算法,它的主要思想是将原始数组递归... [详细]

  • 原理:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(DivideandConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若... [详细]

  • 排序代码对实现Java的Comparable接口的任何类型的数据都有效,但只能是是同一种数据类型的排序(你可以对intdoublechar等数据类型排序,但你不能同时出现不同的数据类型)。重新排序数列,所有元素比基准值小的摆放在基准前面,所... [详细]

  • 一、翻转数组a.第一种方法:创建一个新数组接收b.第二种方法:直接修改原数组;publicclassTestArray{ publicstaticvoidmain(String[]args){ int[]arr=newint[]{1,... [详细]

  • 外部排序是一种把大量无序的数据,按一定的顺序排序的算法。它是一种非常适合处理海量数据的算法,其原理主要有以下几点:首先,将所有要排序的数据分割成若干个较小的子文件,每个子文件只有少量的内存可以容纳,然后分别在每个子文件中进行内部排序,最后再... [详细]

  • 问题JDK6升级JDK7的情况下,由于java.util.Arrays.sortjava.util.Collections.sort使用的排序算法已被替换(mergesort→timsort)。当TimSort检测到待比较的项目违反约定,... [详细]

  • 基于比较的排序算法详解,插入排序,选择排序,交换排序,归并排序,直接插入排序,希尔排序,选择排序,冒泡排序,快速排序(Hoare版,挖坑版,前后指针版),复杂度及稳定性分析【Java数据结构排序排序算法1.排序的概念及引用1.1排序的概念... [详细]

  • 首先,我们知道Java有3种抛出异常的形式:throw(执行的时候一定抛出某种异常对象),throws(出现异常的可能性,不一定会发生),系统自动抛出异常throw用在一个语句抛出异常的时候,throw(aninstanceofexcep... [详细]

  • Java的sort方法就是排序,而且排的是升序,你要想降序可以先获得升序的,然后倒过来或者你重新写比较器Comparator的接口就可以。一sort排序方法本身这里讲的sort方法,都是以Arrays类里面的方法为准,因为很多类的sort方... [详细]

  • [Java教程]sort()多种用法02016-03-2012:00:06sort()方法用于对数组元素进行排序。一、默认情况在默认情况下,sort()方法按升序排列数组项。为了实现排序,sort()方法会调用每个数组项toStrin... [详细]

  • 能掌握到的知识1.了解compaer(O1,O2)中返回1-10这三个什么意思并且如何使用这三个值达到自己想要的排序2.如何实现组合排序即满足排序1情况下进行排序2_javasortjavasort背景最近在刷一道算法题《字符串重新排序》时... [详细]

  • 详解JDK中的sort函数_java排序sort方法java排序sort方法JAVAARRAYS.SORT方法staticvoidsort(ElementType[]a)默认为升序排序staticvoidsort(ElementType[]... [详细]

  • 一、数组Sort排序升序排序,直接使用Arrays.Sort方法,例如:int[]array={10,3,6,1,4,5,9};//正序排序Arrays.sort(array);//会检查数组个数大于286且连续性好就使用归并排序,若小于4... [详细]

  • JavaSort排序是非常常用的方法,这一章我们主要来认识一下Sort的用法和相关的实现。一、数组Sort排序升序排序,直接使用Arrays.Sort方法,例如:int[]array={10,3,6,1,4,5,9};//正序排序Arra... [详细]

  • 数组Sort排序正序排序:Arrays.sort(array),会检查数组个数大于286且连续性好就使用归并排序,若小于32使用插入排序,其余情况使用快速排序int[]array={10,3,6,1,4,5,9};Arrays.sort(a... [详细]

  • 刷题过程中常常遇到排序问题,Java中自带的sort方法可以非常方便的帮助我们进行排序。常见的排序问题有两种情形:1.对一个数组进行排序。2.对自定义类型的类进行排序。一,对数组进行排序:通常情况下我们可以使用Array.sort()来对数... [详细]

相关标签
  

闽ICP备14008679号