✅ 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的更多相关文章

  1. 我为什么要写LeetCode的博客?

    # 增强学习成果 有一个研究成果,在学习中传授他人知识和讨论是最高效的做法,而看书则是最低效的做法(具体研究成果没找到地址).我写LeetCode博客主要目的是增强学习成果.当然,我也想出名,然而不知 ...

  2. LeetCode All in One 题目讲解汇总(持续更新中...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...

  3. [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 ...

  4. 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 ...

  5. Leetcode 笔记 112 - Path Sum

    题目链接:Path Sum | LeetCode OJ Given a binary tree and a sum, determine if the tree has a root-to-leaf ...

  6. Leetcode 笔记 110 - Balanced Binary Tree

    题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...

  7. Leetcode 笔记 100 - Same Tree

    题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...

  8. Leetcode 笔记 99 - Recover Binary Search Tree

    题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...

  9. Leetcode 笔记 98 - Validate Binary Search Tree

    题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...

随机推荐

  1. zabbix4.2安装配置指南

    [声名]本实例中采用Linux CentOS 7系统 CentOS Linux release 7.6.1810 (Core) 1.安装LAMP环境: [root@localhost /]# yum ...

  2. How To Use These LED Garden Lights

    Are you considering the lighting options for the outdoor garden? Depending on how you use it, LED ga ...

  3. selenium的错误截图

    在自动化测试过程中,测试执行期间需要收集获取截图信息,一方面为了错误调试代码,一方面也为了和开发沟通, 获取当前的截图 save_screenshot是获取当前截图的方法,以百度首页为例,打开百度首页 ...

  4. Dev-Cpp/Code::Block/MinGW下使用EasyX

    众所周知,EasyX是个很香的东西,但EasyX目前只支持Visual Studio,那么如果要在MinGW(Dev-Cpp和Code::Block均使用这个编译器)上使用EasyX怎么办呢? 这篇文 ...

  5. 题解 SP5271 XOINC - A Coin Game

    SP5271 XOINC - A Coin Game 双倍经验:P2964 [USACO09NOV]硬币的游戏A Coin Game O3做法(TLE):枚举i,j,k,即剩下i枚金币,上一轮选了j枚 ...

  6. docker容器 - 导入容器、导出容器、查看容器

    实验环境 CentOS 7.5 容器 容器是镜像的运行实例.不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层:同时,容器中的应用进程处于运行状态. 导入和导出容器 实现容器的迁移. 导 ...

  7. js加密(三)企名片

    1. url: https://www.qimingpian.cn/finosda/project/pinvestment 2. target: 3. 简单分析 3.1 打开调试窗口,刷新页面,看看都 ...

  8. 吴裕雄 python 机器学习——人工神经网络感知机学习算法的应用

    import numpy as np from matplotlib import pyplot as plt from sklearn import neighbors, datasets from ...

  9. Java查询数据库

    创建数据库 创建 user 数据库 创建 teacher 数据库 teacher表的user_id列与user表的id列建立一对多连接,user_id作为外键. Java编程查询数据库 向user数据 ...

  10. 论STA | SOCV / POCV 之 variation (2)

    芯片制造涉及到许多复杂重复的过程,如:光刻.蚀刻.离子注入.扩散.退火.而且都是原子级操作,尽管控制非常严格,但偏差不可避免. 工艺偏差会导致芯片物理参数偏差,如:线宽.沟道掺杂浓度.线厚.临界尺寸. ...