每日一题 day1

67 阅读2分钟

每日一题 day1

力扣2006

给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。

|x| 的值定义为:

  • 如果 x >= 0 ,那么值为 x 。
  • 如果 x < 0 ,那么值为 -x 。

示例 1:

输入: nums = [1,2,2,1], k = 1
输出: 4
解释: 差的绝对值为 1 的数对为:
- [1,2,2,1]
- [1,2,2,1]
- [1,2,2,1]
- [1,2,2,1]

解法一:暴力双循环,代码如下:

class Solution:
    def countKDifference(self, nums: List[int], k: int) -> int:
        cnt=0
        n = len(nums)
        for i in range(n):
            for j in range(i+1,n):
                if abs(nums[i] - nums[j]) == k:
                    cnt += 1
        return cnt

解法二:

class Solution:
    def countKDifference(self, nums: List[int], k: int) -> int:
        cnt = Counter() //`Counter()` 来创建一个空的 Counter 对象,然后可以通过多种方式向其中添加元素并进行计数
        res = 0
        for num in nums:
            res += cnt[num+k] + cnt[num-k] //在num前存在数i 这一步为求其 与num差值的绝对值为k的总数 并和res求和
            cnt[num] += 1 // 当前的num放入cnt中
        return res //放回总数

思路: 进行一次遍历,当前遍历的数为num。只需要知道在num之前满足条件的数i的总个数,可以用一个哈希表来维护前面的数i。

力扣175 组合两个表 表: Person

+-------------+---------+
| 列名         | 类型     |
+-------------+---------+
| PersonId    | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+
personId 是该表的主键(具有唯一值的列)。
该表包含一些人的 ID 和他们的姓和名的信息。

 

表: Address

+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
addressId 是该表的主键(具有唯一值的列)。
该表的每一行都包含一个 ID = PersonId 的人的城市和州的信息。

 

编写解决方案,报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为 null 。

以 任意顺序 返回结果表。

结果格式如下所示。

 

示例 1:

输入: 
Person表:
+----------+----------+-----------+
| personId | lastName | firstName |
+----------+----------+-----------+
| 1        | Wang     | Allen     |
| 2        | Alice    | Bob       |
+----------+----------+-----------+
Address表:
+-----------+----------+---------------+------------+
| addressId | personId | city          | state      |
+-----------+----------+---------------+------------+
| 1         | 2        | New York City | New York   |
| 2         | 3        | Leetcode      | California |
+-----------+----------+---------------+------------+
输出: 
+-----------+----------+---------------+----------+
| firstName | lastName | city          | state    |
+-----------+----------+---------------+----------+
| Allen     | Wang     | Null          | Null     |
| Bob       | Alice    | New York City | New York |
+-----------+----------+---------------+----------+
解释: 
地址表中没有 personId = 1 的地址,所以它们的城市和州返回 null。
addressId = 1 包含了 personId = 2 的地址信息。

题解

select firstName, lastName, city, state 
from Person left join Address 
on Person.PersonId = Address.PersonId
;

显示左表的所有内容,显示右表的满足条件的内容,固用左连接。