leetcode 朋友圈
朋友圈班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。
给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。
示例 1:1234567输入:[[1,1,0], [1,1,0], [0,0,1]]输出:2 解释:已知学生 0 和学生 1 互为朋友,他们在一个朋友圈。第2个学生自己在一个朋友圈。所以返回 2 。
示例 2:123456输入:[[1,1,0], [1,1,1], [0,1,1]]输出:1解释:已知学生 0 和学生 1 互为朋友,学生 1 和学生 2 互为朋友,所以学生 0 和学生 2 也是朋友,所以他们三个在一个朋友圈,返回 1 。
提示:
1 <= N <= 200
M[i][i] == 1
M[i][j] == M[j][i]
来源:力扣(LeetCode)
链接:h ...
leetcode 最长连续序列
最长连续序列给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
进阶:
你可以设计并实现时间复杂度为 O(n) 的解决方案吗?
示例 1:123输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例 2:12输入:nums = [0,3,7,2,5,8,4,6,0,1]输出:9
提示:
0 <= nums.length <= 104
-109 <= nums[i] <= 109
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-consecutive-sequence
代码:95%64%12345678910111213141516class Solution { public int longestConsecutive(int[] nums) { if(nums==null||nums.l ...
leetcode 排列序列
排列序列给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:
“123”
“132”
“213”
“231”
“312”
“321”
给定 n 和 k,返回第 k 个排列。
示例 1:12输入:n = 3, k = 3输出:"213"
示例 2:12输入:n = 4, k = 9输出:"2314"
示例 3:12输入:n = 3, k = 1输出:"123"
提示:
1 <= n <= 9
1 <= k <= n!
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutation-sequence
代码:65%45%1234567891011121314151617181920212223242526272829303132333435class Solution { ...
leetcode 数组中的第K个最大元素
数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:12输入: [3,2,1,5,6,4] 和 k = 2输出: 5
示例 2:12输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4
说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array
代码:91%91%123456class Solution { public int findKthLargest(int[] nums, int k) { Arrays.sort(nums); return nums[nums.length-k]; }}
leetcode 三数之和
三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:
答案中不可以包含重复的三元组。
示例:1234567给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
代码:7%17%123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<I ...
leetcode 最长连续递增序列
最长连续递增序列给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。
示例 1:1234输入:nums = [1,3,5,4,7]输出:3解释:最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。
示例 2:123输入:nums = [2,2,2,2,2]输出:1解释:最长连续递增序列是 [2], 长度为1。
提示:
0 <= nums.length <= 104
-109 <= nums[i] <= 109
代码:100%87%1234567891011121314151617class Solution & ...
leetcode 无重复字符的最长子串
无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:123输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:123输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:1234输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
代码:38%16%12345678910111213141516class Solution { public ...
leetcode 分割字符串的方案数
分割字符串的方案数给你一个二进制串 s (一个只包含 0 和 1 的字符串),我们可以将 s 分割成 3 个 非空 字符串 s1, s2, s3 (s1 + s2 + s3 = s)。
请你返回分割 s 的方案数,满足 s1,s2 和 s3 中字符 ‘1’ 的数目相同。
由于答案可能很大,请将它对 10^9 + 7 取余后返回。
示例 1:1234567输入:s = "10101"输出:4解释:总共有 4 种方法将 s 分割成含有 '1' 数目相同的三个子字符串。"1|010|1""1|01|01""10|10|1""10|1|01"
示例 2:12输入:s = "1001"输出:0
示例 3:123456输入:s = "0000"输出:3解释:总共有 3 种分割 s 的方法。"0|0|00""0|00|0""00|0|0"
示例 4:12输 ...
leetcode 矩阵对角线元素的和
矩阵对角线元素的和给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。
请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。
示例 1:![leetcode 矩阵对角线元素的和](leetcode 矩阵对角线元素的和.png)
123456输入:mat = [[1,2,3], [4,5,6], [7,8,9]]输出:25解释:对角线的和为:1 + 5 + 9 + 3 + 7 = 25请注意,元素 mat[1][1] = 5 只会被计算一次。
示例 2:12345输入:mat = [[1,1,1,1], [1,1,1,1], [1,1,1,1], [1,1,1,1]]输出:8
示例 3:12输入:mat = [[5]]输出:5
提示:
n == mat.length == mat[i].length
1 <= n <= 100
1 <= mat[i][j] <= 100
来源: ...
leetcode 分割数组的最大值
分割数组的最大值给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。
注意:数组长度 n 满足以下条件:
1 ≤ n ≤ 1000
1 ≤ m ≤ min(50, n)示例:1234567891011输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5] 和 [10,8],因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/split-array-largest-sum
代码:100时71空12345678910111213141516171819202122232425262728293031323334class Solution { public int splitArray(int[] nums, int m) { int l ...