首页 > 其他分享 >LeetCode三则

LeetCode三则

时间:2024-04-13 22:55:07浏览次数:27  
标签:三则 sort int 队比 nums1 length LeetCode nums2

1.

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

算法的时间复杂度应该为 O(log (m+n)) 。

示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
/**
 * @author XiSoil
 * @date 2024/04/13 20:43
 *执行分布用时1ms,击败的100.00%Java用户
 *消耗内存分布44.80MB,击败的64.20%Java用户
 **/
public class Solution {

    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int sort[] = new int[nums1.length + nums2.length];
        int i = 0, j = 0, k = 0;
        while (i < nums1.length && j < nums2.length) {
            if (nums1[i] < nums2[j]) {
                sort[k] = nums1[i];
                i++;
            } else {
                sort[k] = nums2[j];
                j++;
            }
            k++;
        }
        while (i < nums1.length) {
            sort[k] = nums1[i];
            i++;
            k++;
        }
        while (j < nums2.length) {
            sort[k] = nums2[j];
            j++;
            k++;
        }
        if (sort.length % 2 == 0) {
            return (double) (sort[sort.length / 2 - 1] + sort[sort.length / 2]) / 2;
        } else {
            return (double) sort[sort.length / 2];
        }
    }
}
Solution

2.

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
public class Solution {
/**
 * @author XiSoil
 * @date 2024/04/13 22:28
 *执行分布用时0ms,击败的100.00%Java用户
 *消耗内存分布39.48MB,击败的16.42%Java用户
 **/
    public int climbStairs(int n) {
        int a = 1, b = 2;
        if (n == 1) {
            return a;
        }
        if (n == 2) {
            return b;
        }
        int c = 0;
        for (int i = 3; i <= n; i++) {
            c = a + b;
            a = b;
            b = c;
        }
        return c;
    }
}
Solution

3.

一场比赛中共有 n 支队伍,按从 0 到  n - 1 编号。每支队伍也是 有向无环图(DAG) 上的一个节点。

给你一个整数 n 和一个下标从 0 开始、长度为 m 的二维整数数组 edges 表示这个有向无环图,其中 edges[i] = [ui, vi] 表示图中存在一条从 ui 队到 vi 队的有向边。

从 a 队到 b 队的有向边意味着 a 队比 b 队 强 ,也就是 b 队比 a 队 弱 。

在这场比赛中,如果不存在某支强于 a 队的队伍,则认为 a 队将会是 冠军 。

如果这场比赛存在 唯一 一个冠军,则返回将会成为冠军的队伍。否则,返回 -1 。

注意

环 是形如 a1, a2, ..., an, an+1 的一个序列,且满足:节点 a1 与节点 an+1 是同一个节点;节点 a1, a2, ..., an 互不相同;对于范围 [1, n] 中的每个 i ,均存在一条从节点 ai 到节点 ai+1 的有向边。
有向无环图 是不存在任何环的有向图。

示例 1:
输入:n = 3, edges = [[0,1],[1,2]]
输出:0
解释:1 队比 0 队弱。2 队比 1 队弱。所以冠军是 0 队。

示例 2:
输入:n = 4, edges = [[0,2],[1,3],[1,2]]
输出:-1
解释:2 队比 0 队和 1 队弱。3 队比 1 队弱。但是 1 队和 0 队之间不存在强弱对比。所以答案是 -1 。

提示:
1 <= n <= 100
m == edges.length
0 <= m <= n * (n - 1) / 2
edges[i].length == 2
0 <= edge[i][j] <= n - 1
edges[i][0] != edges[i][1]
生成的输入满足:如果 a 队比 b 队强,就不存在 b 队比 a 队强
生成的输入满足:如果 a 队比 b 队强,b 队比 c 队强,那么 a 队比 c 队强

 

public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int[][] edges0 = {};
        int n0 = 1;
        int[][] edges1 = {{0, 1}, {1, 2}};
        int n1 = 3;
        int[][] edges2 = {{0, 2}, {1, 3}, {1, 2}};
        int n2 = 4;
        int[][] edges3 = {{0, 1}, {1, 2}, {2, 3}, {3, 4}, {4, 5}};
        int n3 = 6;
        int[][] edges4 = {{0, 1}, {1, 2}, {2, 3}, {3, 4}, {4, 5}, {5, 0}};
        int n4 = 6;

        System.out.println(solution.findChampion(n0, edges0)); // 输出:0
        System.out.println(solution.findChampion(n1, edges1)); // 输出:0
        System.out.println(solution.findChampion(n2, edges2)); // 输出:-1
        System.out.println(solution.findChampion(n3, edges3)); // 输出:0
        System.out.println(solution.findChampion(n4, edges4)); // 输出:-1
    }

    public int findChampion(int n, int[][] edges) {
        // 创建一个布尔数组,用于标记每个参与者是否是失败者
        boolean[] isLoser = new boolean[n];

        // 遍历边缘数组,标记每个失败者
        for (int[] edge : edges) {
            isLoser[edge[1]] = true; // 边缘数组中第二个元素标记为失败者
        }

        // 统计非失败者的数量和下标
        int notLoserCount = 0;
        int notLoserIndex = -1;

        // 遍历所有参与者
        for (int i = 0; i < n; i++) {
            if (!isLoser[i]) {
                notLoserCount++; // 非失败者数量加1
                notLoserIndex = i; // 记录非失败者的下标
            }
        }

        // 如果只有一个非失败者,返回该非失败者的下标;否则返回 -1
        return notLoserCount == 1 ? notLoserIndex : -1;
    }

}
Solution

 

 

 

 

标签:三则,sort,int,队比,nums1,length,LeetCode,nums2
From: https://www.cnblogs.com/xxaxf/p/18133540

相关文章

  • LeetCode四则
    1.给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums=[2,7,11,15],targ......
  • 最长递增子序列leetcode的总结
    使用动态规划解决,首先明白dp数组的含义dp[i]表示在位置i时最长的递增子序列dp[i]=max(dp[j]+1,dp[i])为递推公式初始化dp[i]=1都初始化为1因为最基本的每一个位置至少为一个遍历顺序for(inti=2;i<len;i++){            for(intj=0;j<i;j++){if(n......
  • 算法训练营Day08-LeetCode344. 反转字符串 && 541. 反转字符串 II && 151. 反转字符串
    344.反转字符串题目链接:LeetCode344.反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题思路:字符串首尾字符交换即可完成反转。定......
  • LeetCode 2439. 最小化数组中的最大值
    给你一个下标从 0 开始的数组 nums ,它含有 n 个非负整数。每一步操作中,你需要:选择一个满足 1<=i<n 的整数 i ,且 nums[i]>0 。将 nums[i] 减1。将 nums[i-1] 加1。你可以对数组执行 任意 次上述操作,请你返回可以得到的 nums 数组中 最大值......
  • LeetCode 1760. 袋子里最少数目的球
    给你一个整数数组 nums ,其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。你可以进行如下操作至多 maxOperations 次:选择任意一个袋子,并将袋子里的球分到 2个新的袋子中,每个袋子里都有 正整数 个球。比方说,一个袋子里有 5 个......
  • LeetCode 面试经典150题---005
    ####135.分发糖果n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到1个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的最少糖果数目。n==rat......
  • 刷leetcode有感
    ......
  • Leetcode反转字串541/翻转字串的单词151/实现 strStr方法28/重复的子字符串459
    前言Leetcode541/151/28一、541题(反转字符串)题目描述:给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。如果剩余字符少于k个,则将剩余字符全部反转。如果剩余字符小于2k但大于或等于k个,则反转前k个字符,其余......
  • LeetCode 面试经典150题---004
    ####274.H指数给你一个整数数组citations,其中citations[i]表示研究者的第i篇论文被引用的次数。计算并返回该研究者的h指数。根据维基百科上h指数的定义:h代表“高引用次数”,一名科研人员的h指数是指他(她)至少发表了h篇论文,并且至少有h篇论文被引用次数大......
  • 【leetcode面试经典150题】26.判断子序列(C++)
    【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C++语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致)【题目描述】给定字符串 s 和 t ......