LeetCodeHot100刷题笔记

热题100 哈希 1. 两数之和 给定: 数组nums 和target 要求:找出两元素之和为target的数组下标 暴力: 1for i in range(len(nums)): 2 for j in range(i+1, len(nums)): 3 if ... 4# O(n^2) 题解: 问题分解 => 给定x 寻找 target-x(这是复杂度的主要部分) 用额外结构记录 1hashtable = dict() 2for i in range(len(nums)): 3 if nums[i] in hashtable: 4 return [i, hashtable[nums[i]]] 5 else: 6 hashtable[nums[i]] = i 7# 保存遍历过的元素,参考过去 ⭐思路:target = num1 + num2 => 已知num1 求num2 => 寻找 target - num1 寻找过程:hash存储,这样可以 O(1) 查找 另一个 49. 字母异位词分组 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [["bat"],["nat","tan"],["ate","eat","tea"]] 思路:condition => […] HashTable, Key=排序后的Str, Value=List<String> 1HashMap<String, List<String>> hashTable = new HashMap<>(); 2for(String str : strs){ 3 char[] charArray = str.toCharArray(); // 将字符串转换为字符数组 4 Arrays.sort(charArray); // 对字符数组进行排序 5 String orderStr = new String(charArray); 6 if (hashTable.containsKey(orderStr)) { 7 hashTable.get(orderStr).add(str); 8 }else { 9 hashTable.put(orderStr, new ArrayList<>()); 10 hashTable.get(orderStr).add(str); 11 } 12} 13 14List<List<String>> res = new ArrayList<>(); 15 16for (Map.Entry<String, List<String>> entry : hashTable.entrySet()) { 17 res.add(entry.getValue()); 18} 19return res; ⭐思路:组合在一起 => eat和tea的共同点 => 均含有aet(顺序的) ...

April 13, 2025 · 36 min · 7504 words · LongWei

高频SQL50题刷题笔记

高频SQL50题 查询 Where&GroupBy&HAVING 1SELECT id, revenue # 某个用户2021年可能有多项记录 2FROM users 3Where year = 2021 4 5SELECT id, SUM(revenue) 6FROM users 7Where year = 2021 # 1. 先筛选出此年份所有记录 8Group By id # 2. 再根据id分组 3. 必须结合SUM() 或者其他聚合函数,因此这个有多列,需要处理为单值。 9 10SELECT id 11FROM users 12Where year = 2021 # 1. 先筛选记录 13Group By id # 2. 分组 14HAVING SUM(revenue) > 1000 # 3. 聚合分组字段记录 并 判断 查找没买过东西的顾客 1# 1. NOT EXISTS 2SELECT `name` AS `Customers` 3FROM `Customers` AS c 4WHERE NOT EXISTS ( 5 SELECT `customerId` 6 FROM `Orders` AS o 7 Where o.customerId = c.id 8) 1# 2. Left Join 2# example 3SELECT c.id AS id, c.name, o.id AS oid 4FROM customers AS c LEFT JOIN orders AS o 5on c.id = o.customerId 6 7SELECT `name` as `Customers` 8FROM customers AS c LEFT JOIN orders AS o 9on c.id = o.customerId 10WHERE o.id is NULL 计算特殊奖金 编写解决方案,计算每个雇员的奖金。如果一个雇员的 id 是 奇数 并且他的名字不是以 'M' 开头,那么他的奖金是他工资的 100% ,否则奖金为 0 。 ...

November 24, 2024 · 14 min · 2965 words · LongWei