leetcode 0218
✅ 1200. 最小绝对差
描述
给你个整数数组 arr,其中每个元素都 不相同。
请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。
示例 1:
输入:arr = [4,2,1,3]
输出:[[1,2],[2,3],[3,4]]
示例 2:
输入:arr = [1,3,6,10,15]
输出:[[1,3]]
示例 3:
输入:arr = [3,8,-10,23,19,-4,-14,27]
输出:[[-14,-10],[19,23],[23,27]]
提示:
2 <= arr.length <= 10^5
-10^6 <= arr[i] <= 10^6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-absolute-difference
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
sort 后,进行查找相邻的两者 差值,放入map
然后对map 的key 排序,打印出最小的key 对应的所有 values
实际上大家都如下,使用遍历数组,然后过程中记录minDiff,然后在原地做事情,没有使用map
这些个解答没有使用我自己想的map, 因为key 可能重复,所以他用了数组:vector, list
cpp
class Solution {
public:
vector<vector<int>> minimumAbsDifference(vector<int>& arr) {
sort(arr.begin(), arr.end());
int minest = INT_MAX;
for(int i = 0; i < arr.size() - 1; i++) {
int curDiff = arr[i+1] - arr[i];
minest = minest >= curDiff ? curDiff: minest;
}
vector<vector<int>> res;
for (int i = 0; i < arr.size() - 1; i++) {
if(arr[i+1] - arr[i] == minest){
res.push_back({arr[i], arr[i+1]});
//两个 int 尺寸的int 被放入内层vector,然后作为一个vector 放入外层vector
}
}
return res;
}
};
/*执行用时 :
96 ms
, 在所有 C++ 提交中击败了
90.87%
的用户
内存消耗 :
17 MB
, 在所有 C++ 提交中击败了
72.87%
的用户*/
py
class Solution:
def minimumAbsDifference(self, arr: List[int]) -> List[List[int]]:
arr.sort()
len1 = len(arr)
len2 = len1 - 1
mininum = [0] * len2
for i in range (len2):
mininum[i] = arr[i+1] - arr[i]# guess we dont need abs
m = min(mininum)
res = []
for i in range (len2):
if mininum[i] == m:
res.append([arr[i], arr[i+1]])
return res
'''
执行用时 :
484 ms
, 在所有 Python3 提交中击败了
41.26%
的用户
内存消耗 :
27.2 MB
, 在所有 Python3 提交中击败了
49.59%
的用户
'''
✅ 897. 递增顺序查找树
描述
给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。
输入:[5,3,6,2,4,null,8,1,null,null,null,7,9]
5
/ \
3 6
/ \ \
2 4 8
/ / \
1 7 9
输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]
1
\
2
\
3
\
4
\
5
\
6
\
7
\
8
\
9
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/increasing-order-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
cpp
my dont compile pass:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* increasingBST(TreeNode* root) {
if(!root) {
return NULL;//blank tree
}
stack<TreeNode> s;
TreeNode *res = (TreeNode *) malloc (sizeof(TreeNode));
TreeNode *ret = res;
while(root || !s.empty()) {
while(root) {
s.push(root);
root = root->left;
}
root = s.top();
s.pop();
res = root;
root = root->right;
res = res->right;
}
return ret;
}
};
指针问题?
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* increasingBST(TreeNode* root) {
if(!root) {
return NULL;//blank tree
}
stack<TreeNode> s;
TreeNode *res = (TreeNode *) malloc (sizeof(TreeNode));
TreeNode *ret = res;
while(root || !s.empty()) {
while(root) {
s.push(*root);
root = root->left;
}
//we must re-declare root ptr
TreeNode *node = (TreeNode *) malloc (sizeof(TreeNode));
*node = s.top();
s.pop();
printf(":%d:", node->val);
res->right = node;
res = res->right;
root = node->right;
}
return ret->right;
}
};
output:
fuck ptr
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* increasingBST(TreeNode* root) {
if(!root) {
return NULL;//blank tree
}
stack<TreeNode> s;
TreeNode *res = (TreeNode *) malloc (sizeof(TreeNode));
TreeNode *ret = res;
while(root || !s.empty()) {
while(root) {
s.push(*root);
root = root->left;
}
//we must re-declare node ptr
TreeNode *node = (TreeNode *) malloc (sizeof(TreeNode));
*node = s.top();
s.pop();
printf(":%d:", node->val);
res->right = (TreeNode *) malloc(sizeof(TreeNode));
res->right = node;
res->left = NULL;
res = res->right;
root = node->right;
}
printf("bef ret");
return ret;
}
};
// 气死人!!!todo fuck me!!
py
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def increasingBST(self, root: TreeNode) -> TreeNode:
s = []
dummy = TreeNode(0)
p = dummy
while s or root:
if root:
s.append(root)
root = root.left
else:
cur = s.pop()
root = cur.right
cur.left = None
p.right = cur
p = p.right
return dummy.right
'''
执行用时 :
88 ms
, 在所有 Python3 提交中击败了
84.62%
的用户
内存消耗 :
13.2 MB
, 在所有 Python3 提交中击败了
43.45%
的用户
'''
✅ 183. 从不订购的客户
https://leetcode-cn.com/problems/customers-who-never-order/
描述
某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。
Customers 表:
+----+-------+
| Id | Name |
+----+-------+
| 1 | Joe |
| 2 | Henry |
| 3 | Sam |
| 4 | Max |
+----+-------+
Orders 表:
+----+------------+
| Id | CustomerId |
+----+------------+
| 1 | 3 |
| 2 | 1 |
+----+------------+
例如给定上述表格,你的查询应返回:
+-----------+
| Customers |
+-----------+
| Henry |
| Max |
+-----------+
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/customers-who-never-order
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
sql todo rev me
# 498ms
select c.Name as Customers from Customers c left join Orders o on o.CustomerId = c.Id where o.Id is null;
# 532ms
select c.Name as Customers from Customers c where not exists (select 1 from Orders o where o.CustomerId = c.Id);
# 455ms
select c.Name as Customers from Customers c where c.Id not in (select distinct o.CustomerId from Orders o);
✅ 575. 分糖果
https://leetcode-cn.com/problems/distribute-candies/
描述
给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。
示例 1:
输入: candies = [1,1,2,2,3,3]
输出: 3
解析: 一共有三种种类的糖果,每一种都有两个。
最优分配方案:妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类数最多。
示例 2 :
输入: candies = [1,1,2,3]
输出: 2
解析: 妹妹获得糖果[2,3],弟弟获得糖果[1,1],妹妹有两种不同的糖果,弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。
注意:
数组的长度为[2, 10,000],并且确定为偶数。
数组中数字的大小在范围[-100,000, 100,000]内。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/distribute-candies
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
cpp
class Solution {
public:
int distributeCandies(vector<int>& candies) {
set<int> myset;
set<int>::iterator it;
for(int i: candies){
myset.insert(i);
}
int halfCount = candies.size() / 2;
int ans = 0;
//add each kind in myset to sis
int sisGet = 0;
for(it = myset.begin(); it != myset.end(); ++it){
//for each kind in myset, give it to sis
sisGet++;
}
// sister got : more kinds, give the redundant kinds to bro
// so sister left halfCount
if(sisGet > halfCount) {
return halfCount;
}else if (sisGet < halfCount){
// if there are so few kind, that's all sis can got, so return it
return sisGet;
}
// sisGet == halfCount
return halfCount;
}
};
/*执行用时 :
424 ms
, 在所有 C++ 提交中击败了
39.25%
的用户
内存消耗 :
54.8 MB
, 在所有 C++ 提交中击败了
10.24%
的用户*/
//fuck me tdo, can't use set properly, now I can use c++ fucking set ok
py
niu's idea:
step1: first, we want to find all the unique candy?
推翻:
设想 有糖果: 蜜桃,蜜桃,蜜桃,大白兔,大白兔,四百木,巴达木,六百木
蜜桃 counter = 2
大白兔 counter = 2
四百木 counter = 1
当: if Counter[某个种类] == 1:
sis += 1
那么结果:妹妹,只得到: 四百木
哥哥反而得到了: 蜜桃,大白兔
class Solution:
def distributeCandies(self, candies: List[int]) -> int:
from collections import Counter
sis = 0
c = Counter(candies)
# 首先分配给sis 所有稀有糖果
for i in range(max(candies)):
if c[i] == 1:
# this is the unique fruit
sis+=1
if sis < (len(candies) // 2):
# 如果妹妹没拿够
# 那么如果 糖果本身 的种类 就少于 一半,那么 妹妹最多获得所有种类的水果
# 也就是 return len(set(candies))
if len(set(candies)) < (len(candies) // 2):
return len(set(candies))
else:
# 如果呢,种类大于 一半,那么 妹妹就能拿 一半 数量的水果,每个水果
# 就是一个种类
return len(candies) // 2
# 如果妹妹光拿稀有水果 就超过了 一半的数量,那么不要贪心,就拿一半,另一半还要
# 给哥哥
else:
return len(candies) // 2
'''
执行用时 :
1928 ms
, 在所有 Python3 提交中击败了
5.33%
的用户
内存消耗 :
15 MB
, 在所有 Python3 提交中击败了
48.59%
的用户
'''
✅ 136. 只出现一次的数字
https://leetcode-cn.com/problems/single-number/
描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
cpp
int singleNumber(vector<int>& nums) {
int result = 0;
for (int i = 0; i < nums.size(); i++) {
bitset<4> bs1(result);
bitset<4> bs2(nums[i]);
cout<<bs1<<"^"<<bs2<<"=";
result = result^nums[i];//二进制异或运算,
bitset<4> bs3(result);
cout<<bs3<<endl;
}
return result;
}
//my
class Solution {
public:
int singleNumber(vector<int>& nums) {
int res;
for(int num: nums) {
res ^= num;
}
return res;
}
};
todo fix 力扣SB:
py
class Solution:
def singleNumber(self, nums: List[int]) -> int:
from collections import Counter
c = Counter(nums)
print(c)
for i in nums:
if c[i] == 1:
return i
'''
执行用时 :
96 ms
, 在所有 Python3 提交中击败了
80.27%
的用户
内存消耗 :
15.8 MB
, 在所有 Python3 提交中击败了
40.45%
的用户
'''
leetcode 0218的更多相关文章
- 我为什么要写LeetCode的博客?
# 增强学习成果 有一个研究成果,在学习中传授他人知识和讨论是最高效的做法,而看书则是最低效的做法(具体研究成果没找到地址).我写LeetCode博客主要目的是增强学习成果.当然,我也想出名,然而不知 ...
- LeetCode All in One 题目讲解汇总(持续更新中...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
- [LeetCode] Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串
Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...
- Leetcode 笔记 113 - Path Sum II
题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...
- Leetcode 笔记 112 - Path Sum
题目链接:Path Sum | LeetCode OJ Given a binary tree and a sum, determine if the tree has a root-to-leaf ...
- Leetcode 笔记 110 - Balanced Binary Tree
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
- Leetcode 笔记 99 - Recover Binary Search Tree
题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...
- Leetcode 笔记 98 - Validate Binary Search Tree
题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...
随机推荐
- Commercial Lighting: LED Ceiling Light, LED Ceiling Light
Unlike ceiling lamps, floor lamps, chandeliers, lamps that can sometimes rely on "faces", ...
- 对C#单例模式的理解
2018年11月6日 小雨 一.单例模式的定义 确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一的实例,是一种对象创建型模式,有如下3个要点: 只能有一个实例 必须是自行创建这个 ...
- jQuery 源码解析(三十) 动画模块 $.animate()详解
jQuery的动画模块提供了包括隐藏显示动画.渐显渐隐动画.滑入划出动画,同时还支持构造复杂自定义动画,动画模块用到了之前讲解过的很多其它很多模块,例如队列.事件等等, $.animate()的用法如 ...
- numpy (1.16.4) has the default value of allow_pickle as False.
My version of numpy (1.16.4) has the default value of allow_pickle as False. numpy版本是1.16.4,allow_pi ...
- 矩阵-bzoj1898
This article is made by Jason-Cow.Welcome to reprint.But please post the article's address. BZOJ1898 ...
- 类型type:clusterip和service内部的关系
类型type:clusterip和service内部的关系 待办 https://stackoverflow.com/questions/41509439/whats-the-difference-b ...
- 【音乐欣赏】《JINGO JUNGLE》 - MYTH & ROID
歌名:JINGO JUNGLE 作者:MYTH & ROID [00:19.82]Don’t go away 逃げ場はない [00:27.12]Oh why? You’re crying 嗤え ...
- Go常量
1. 常量 package main import "fmt" func main() { /* 常量: 1.概念:同变量类似,程序执行过程中数值不能改变 2.语法: 显式类型定义 ...
- mybatis用mysql数据库自增主键,插入一条记录返回新增记录的自增主键ID
今天在敲代码的时候遇到一个问题,就是往数据库里插入一条记录后需要返回这个新增记录的ID(自增主键), 公司框架用的是mybatis的通用Mapper接口,里面的插入方法貌似是不能把新纪录的ID回填到对 ...
- Wx-小程序-长按复制文本
view: <text bindlongtap='copy' data-name='{{name}}'>{{item.name}}</text> js: copy(e) { v ...