当前位置: 首页 > news >正文

11.9 LeetCode 题目汇总与解题思路

第一题:242. 有效的字母异位词

解法1:数组计数法(最优)

class Solution {public boolean isAnagram(String s, String t) {if(s.length()!=t.length()) return false;int[] alpha = new int[26];for(int i=0;i<s.length();i++){alpha[s.charAt(i)-'a']++;alpha[t.charAt(i)-'a']--;}for(int i=0;i<26;i++){if(alpha[i]!=0) return false;}return true;}
}

特点

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
  • 只适用于小写字母场景

解法2:排序比较法

class Solution {
public:bool isAnagram(string s, string t) {if(s.length()!=t.length()) return false;sort(s.begin(),s.end());sort(t.begin(),t.end());return s==t;}
};

特点

  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(1) 或 O(n)(取决于排序算法)
  • 通用性强,但效率较低

解法3:哈希表法

class Solution {
public:bool isAnagram(string s, string t) {if(s.length() != t.length()) return false;unordered_map<char, int> map;for(char c : s) map[c]++;for(char c : t) map[c]--;for(auto val : map) {if(val.second != 0) return false;}return true;}
};

特点

  • 时间复杂度:O(n)
  • 空间复杂度:O(k),k为字符集大小
  • 适用于Unicode字符

第二题:202. 快乐数

解法1:快慢指针法(Floyd判圈)

class Solution {
public:int bitSqureSum(int n) {int sum = 0;while(n > 0) {int bit = n % 10;sum += bit * bit;n = n / 10;}return sum;}bool isHappy(int n) {int slow = n, fast = n;while(true) {fast = bitSqureSum(fast);fast = bitSqureSum(fast);  // 快指针走两步slow = bitSqureSum(slow);  // 慢指针走一步if(fast == 1) return true;   // 找到快乐数if(fast == slow) return false; // 进入循环}}
};

特点

  • 时间复杂度:O(logn)
  • 空间复杂度:O(1)
  • 数学证明:非快乐数最终会进入循环

解法2:哈希表记录法

class Solution {
public:int bitSqureSum(int n) {int sum = 0;while(n > 0) {int bit = n % 10;sum += bit * bit;n = n / 10;}return sum;}bool isHappy(int n) {unordered_map<int,int> map;map[n] = 1;while(n != 1) {n = bitSqureSum(n);if(map[n] == 1) return false; // 出现重复,进入循环map[n] = 1;}return true;}
};

特点

  • 时间复杂度:O(logn)
  • 空间复杂度:O(logn)
  • 思路直观,容易理解

第三题:349. 两个数组的交集

解法1:数组哈希法

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {int hash[10000] = {0};vector<int> ans;for(int i=0;i<nums1.size();i++) {hash[nums1[i]] = 1;}for(int i=0;i<nums2.size();i++) {if(hash[nums2[i]] == 1) {ans.push_back(nums2[i]);hash[nums2[i]] = 2;  // 标记为已添加,避免重复}}return ans;}
};

特点

  • 时间复杂度:O(m+n)
  • 空间复杂度:O(10000)
  • 适用于数值范围已知的情况

解法2:双哈希表法

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_map<int, int> map, quchong;vector<int> ans;for(int a : nums1) {map[a] = 1;}for(int a : nums2) {if(map[a] && quchong[a] != 1) {quchong[a] = 1;ans.push_back(a);}}return ans;}
};

特点

  • 时间复杂度:O(m+n)
  • 空间复杂度:O(m)
  • 通用性强,适用于任意整数

第四题:1. 两数之和

解法1:哈希表一次遍历(最优)

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> map;for(int i=0;i<nums.size();i++) {if(map.count(target - nums[i]))return {i, map[target - nums[i]]};map[nums[i]] = i;}return {};}
};

特点

  • 时间复杂度:O(n)
  • 空间复杂度:O(n)
  • 一次遍历,边查边存

解法2:暴力枚举法

int* twoSum(int* nums, int numsSize, int target, int* returnSize){for(int i=0;i<numsSize;i++){for(int j=i+1;j<numsSize;j++){if(nums[i]+nums[j]==target){*returnSize=2;int *ans=(int*)malloc(sizeof(int)*2);ans[0]=i;ans[1]=j;return ans;}}}*returnSize=0;return NULL;   
}

特点

  • 时间复杂度:O(n²)
  • 空间复杂度:O(1)
  • 思路简单,但效率低

核心技巧总结

技巧适用场景代表题目
数组计数字符统计、数值范围固定有效的字母异位词
快慢指针循环检测、链表问题快乐数、环形链表
哈希表记录查找、去重、计数两数之和、交集
排序+双指针需要有序处理的场景三数之和等

选择建议

  1. 字符/小范围数值 → 数组计数法
  2. 循环检测问题 → 快慢指针法
  3. 通用查找问题 → 哈希表法
  4. 简单场景 → 暴力法(小数据量)
http://www.dtcms.com/a/593038.html

相关文章:

  • leetcode 707 设计链表
  • dedecms_v5.6室内装饰设计公司企业网站模板.rar免费的素材网站有哪些
  • S7.Net documentation 文档中文说明书
  • 深度学习入门:从理论到实践
  • ts-静态类型检查,自动编译,ts类型 01
  • 文本插值,属性绑定,条件渲染,列表渲染
  • .NET周刊【11月第1期 2025-11-02】
  • C# 垃圾回收机制深度解析
  • 做微信头图的网站中国光伏企业排行榜
  • 亚马逊、Temu 自养号采购测评:从零打造安全体系
  • Mysql 5.7.26 安装
  • 【ZeroRange WebRTC】码学基础与实践:哈希、HMAC、AES、RSA/ECDSA、随机数、X.509
  • 深圳做手机网站建设中小企业网站建设多少钱
  • 【大数据技术01】数据科学的基础理论
  • 研发管理知识库(1)DevOps开发模式简介
  • 【ComfyUI/SD环境管理指南(一)】:如何避免插件安装导致的环境崩溃与快速修复
  • 深入理解 ThreadLocal、InheritableThreadLocal 与 TransmittableThreadLocal
  • 网站维护服务器广告公司叫什么名字好
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(16):文法和单词-第四课
  • 破解进入网站后台wordpress域名如何申请
  • 基于 Spring Boot 与 RabbitMQ 的分布式消息通信机制设计与实现
  • 个人网站搭建详细步骤郑州网站建设流程
  • Java 之详解字符串拼接(十四)
  • Redis集群详解
  • 6 ElasticsearchRestTemplate
  • 第3章:矢量与栅格数据模型
  • java 面试问题
  • Elasticsearch-3--什么是Lucene?
  • 01-SQL 语句的关键字顺序
  • 树莓派Raspberry Pi 5的汉化