1 | 给你一个 非递减 有序整数数组 nums 。 |
1 |
|
1 | 给你一个 非递减 有序整数数组 nums 。 |
1 |
|
1 | 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 |
难度:中等
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
1 | 输入: [3,2,1,5,6,4] 和 k = 2 |
示例 2:
1 | 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 |
说明:
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
1 | class Solution { |
建立一个大根堆,做 $k - 1$ 次删除操作后堆顶元素就是我们要找的答案。
1 | class Solution { |
1 | class Solution { |
1 | class Solution{ |
3
直到某一指针达到序列尾;1 |
|
1
,并调用 maxHeapify(0)
,目的是把新的数组顶端数据调整到相应位置;2
,直到堆的尺寸为 1
。1 | class Solution { |
找最大的k个数
1 | class Solution { |
1 | package runoob; |
难度:中等
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。
给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,能够偷窃到的最高金额。
示例 1:
1 | 输入:nums = [2,3,2] |
示例 2:
1 | 输入:nums = [1,2,3,1] |
示例 3:
1 | 输入:nums = [0] |
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 1000
算法题有两大核心简化复杂问题的思路:减而治之和分而治之,这题把环形分为单排就是分而治之,即把一个问题分成多个规模更小的子问题。
使用两个dp数组,一个负责 $0 : (n-1)$,另一个负责$1:n$,最后计算$n$和$(n-1)$的最大值
1 | class Solution { |
1 | class Solution { |
状态转移方程:
$dp[i] =Math.max(dp[i-2]+nums[i],dp[i-1]);$
1 |
|
先放大又边界,如果和大于目标值,缩小左边界,记录窗口的最小值,直至右边界到达最右端并且左边界不能继续收缩
1 | 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 |
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
1 | n 块石头放置在二维平面中的一些整数坐标点上。每个坐标点上最多只能有一块石头。 |
如果x相同或者y相同那么认为两个点是连通的,只需要计算有多少个点是不连通的就可以计算出不能被移除的石头的数量
1 | class Solution { |
1 | import java.util.HashMap; |
1 | 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。 |
找到公共前缀后,将后面的都置0
1 | class Solution { |
1 | class Solution { |
难度:中等
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
示例 1:
1 | 输入:[1,2,3,1] |
示例 2:
1 | 输入:[2,7,9,3,1] |
提示:
0 <= nums.length <= 100
0 <= nums[i] <= 400
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
1 |
|
1 | 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。 |
如果一个数字出现三次,那么他的二进制表示的每一位也出现三次。如果把所有出现三次的数字的二进制表示的每一位都分别加起来,那么每一位的和都能被3整除。
我们把数组中所有数字的二进制表示的每一位都加起来。如果怕某一位的和能被3整除,那么那个只出现一次的数字二进制表示中对应的那一位是0;否则就是1.
1 | class Solution { |
1 | class Solution { |
1 | 给定一个三角形 triangle ,找出自顶向下的最小路径和。 |
1 | class Solution { |
1 | class Solution { |
从后往前遍历不会覆盖前面的计算结果,因此可以省去o(n)的空间
1 | class Solution { |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true