题目:Given a binary treestruct Node { int val; Node *left; Node *right; Node *next;}Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.Initially, all next pointers are set t
1、矩阵中的局部最大值  简单题,n×n的矩阵,最后得到(n-2)×(n-2)的矩阵,做法就是枚举每个起点。class Solution { public: int find_max(vector<vector<int>>& grid,int start_i,int start_j){ int num_max = 0;
You have one chocolate bar that consists of some chunks. Each chunk has its own sweetness given by the array sweetness. You want to share the chocolate with your k friends so you start cutting the chocolate bar into k + 1 pieces using k cuts, each piece c
回文数 easy # 两种写法 # 时间复杂度低 且考虑特殊情况 class Solution: def isPalindrome(self, x: int) -> bool: # first solution follow the answer if x < 0 or ( x % 10 == 0 and x != 0 ): return False reverted
二叉树开始 使用Python3 完成前中后序遍历 点击查看代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solut
1. 灯泡开关I 初始时有 n 个灯泡处于关闭状态,第i轮切换i的倍数位置的开关,直到第n轮切换位置n的灯泡开关,返回n轮后灯泡亮着个数 实际上就是求进行奇数次操作灯泡个数,对第k个灯泡进行操作的轮次为其约数,约数一般成对存在,除非为完全平方数 原问题转换为求1~n的完全平方数个数 retur
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2: 输入:nums = [0]输出:[[],[0]] 提示: 1 <= nums.leng
857. 雇佣 K 名工人的最低成本难度困难 274 有 n 名工人。 给定两个数组 quality 和 wage ,其中,quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] 。 现在我们想雇佣 k 名工人组成一个工资组。在雇佣 一组 k 名工人时,我们必须按照下述规则向他
670. 最大交换难度中等 342 给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736输出: 7236解释: 交换数字2和数字7。示例 2 : 输入: 9973输出: 9973解释: 不需要交换。注意: 给定数字的范围是 [0, 108] 思路: 尽量将大的
LeetCode力扣(数组01:存在重复元素) 题目: 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 示例: 示例 1: 输入:nums = [1,2,3,1] 输出:true 示例 2: 输入:nums = [1,2,3,4] 输出:false 示例 3: 输入:nums = [1,1,1,3,3,4,3,2,4,
01背包 const int N = 20010; class Solution { public: int dp[N]; bool canPartition(vector<int>& nums) { int sum = 0; for (int i = 0; i < nums.size(); i ++) sum += nums[i]; if (sum % 2 != 0) return false;
LeetCode — 144. 二叉树前序遍历 二叉树前序遍历 — LeetCode 这是 LeetCode 的解决方案—— 144. 二叉树前序遍历 . 这个问题是一个经典的二叉树的前序遍历。我们可以同时使用递归和迭代。 递归方式需要注意左右节点的递归顺序。迭代的重点是了解栈的特性,注意左右节点的堆叠顺
本题思路是遍历一遍当前数组的元素,假设当前元素为i,f[i]是以元素i结尾的最长的递增子序列长度,那么f[i] = 1 + max(f[i-k], f[i-k+1],...,f[i-1])。核心问题就是如何在遍历每个元素时求出max(f[i-k], f[i-k+1],...,f[i-1]),如果使用普通的遍历,那么时间复杂度为\(O(n^2)\),会超时,因此可
667. 优美的排列 II难度中等 给你两个整数 n 和 k ,请你构造一个答案列表 answer ,该列表应当包含从 1 到 n 的 n 个不同正整数,并同时满足下述条件: 假设该列表是 answer = [a1, a2, a3, ... , an] ,那么列表 [|a1 - a2|, |a2 - a3|, |a3 - a4|, ... , |an-1 - an|] 中应该有且
1475. 商品折扣后的最终价格难度简单 166 给你一个数组 prices ,其中 prices[i] 是商店里第 i 件商品的价格。 商店里正在进行促销活动,如果你要买第 i 件商品,那么你可以得到与 prices[j] 相等的折扣,其中 j 是满足 j > i 且 prices[j] <= prices[i] 的 最小下
有 n 名工人, 给定两个数组 quality 和 wage ,其中 quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] 现在我们想雇佣 k 名工人组成一个工资组,满足一下条件 对工资组中的每名工人,应当按其工作质量与同组其他工人的工作质量的比例来支付工资。 工资组中的每名工人至少
难度挺大..降重细节多 看到个老哥的评价,醍醐灌顶: 说白了就是降维处理, 由三维降到二维, 针对任意索引i的\(nums[i]\) 求\([i+1,size )\)范围内不重复的$$twoSum target = - nums[i];$$后面还有一个四数之和, 一样的问题, 先降到三维, 再降到二维, 随想录 https://gitee.com/p
地址 https://leetcode.cn/problems/longest-consecutive-sequence/ 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums = [100,4,200,1,3,2] 输出:4 解释:最长
LeetCode 两数相加算法题解 All In One js / ts 实现两数相加 两数相加原理 图解 字符串相加 / 大数相加 // 字符串相加 / 大数相加 const addStrings = function(num1, num2) { let res = ''; let temp = 0; const arr1 = num1.split(''); const arr2 = num2.split(
题目(链接) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一
/** * <p>给你一个链表数组,每个链表都已经按升序排列。</p> * * <p>请你将所有链表合并到一个升序链表中,返回合并后的链表。</p> * * <p> </p> * * <p><strong>示例 1:</strong></p> * * <pre><strong>输入:</strong>lists =
原题链接:https://leetcode.cn/problems/add-strings/ 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。 示例 1: 输入:num1 = "11", num2 = "1
面试算法题 dfs相关 全排列 #include<bits/stdc++.h> using namespace std; const int N = 10; //用一个path数组来存储每次到底层的路径 int path[N]; //用一个布尔数组来存储每次已经遍历的点,默认是false bool st[N]; int n; //u表示当前的层数 void dfs(int u) {
给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。 由于答案可能很大,因此 返回答案模 10^9 + 7 。 示例 1: 输入:arr = [3,1,2,4]输出:17解释:子数组为 [3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。 最小值为 3,1,2,4,1,1,2,1,1,1,和为 17。示例 2:
磨练 LeetCode 问题的禅宗:第 93 天——缺失和多余的数字 欢迎回到 LeetCode 日常练习系列 . 今天我做了 2 简单 问题。让我们开始! Photo by 詹姆斯·萨顿 on 不飞溅 单号 [ 单号 - LeetCode 给定一个非空整数数组 nums,每个元素出现两次,除了一个。找到那个单一的。你必须… leet