day33哈希表

news2024/11/25 10:39:08

1.哈希表
常见的哈希表分为三类,数组,set,map,C语言的话是不是只能用数组和
2.例题
题目一:
在这里插入图片描述
分析:题目就是判断两个字符串出现的次数是否相同;
1)哈希表26个小写字母次数初始化为0;
2)遍历s字符串;字母次数++;遍历t字符串,字母次数–;
3)看hash是否全部为0? 为0说明s和t是字母异位词;

bool isAnagram(char * s, char * t){
    int hash[26] = {0}; //注意这里必须初始化为0,不然用例过不了
    int slen = strlen(s);
    int tlen = strlen(t);
    if (slen != tlen) {
        return false;
    }
    // 统计s所有字母出现的频率在哈希表里
    for (int i = 0; i < slen; i++) { 
        hash[s[i] - 'a']++;// -a就是字母下标做了一个映射 a就是0就是1; 
    }
    // 如何比对t 呢? 遍历t数组的时候,看hash表是不是都是0了?如果是0 则说明两个数组元素相同;
    for (int i = 0; i < tlen;i++) {
        hash[t[i] - 'a']--;// 前一个++ 后一个-- 如果s  t相同,hash肯定为0了
    }

    for (int i = 0; i < 26;i++) {
        if (hash[i] != 0) {
            return false;
        }
    }
    return true;
}

题目二:
在这里插入图片描述

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){

    int hash[1000] = {0};
    int lessSize = nums1Size < nums2Size ? nums1Size : nums2Size;

    int  *result = (int *)malloc(sizeof(int)* lessSize);
    int resultIndex = 0;
    for(int i = 0; i < nums1Size; i ++) {
        hash[nums1[i]]++;
    }

    for(int i = 0; i < nums2Size; i ++) {
        if(hash[nums2[i]] > 0) {
            result[resultIndex] = nums2[i];
            resultIndex ++;
            hash[nums2[i]] = 0;
        }
    }

    * returnSize = resultIndex;//一定要赋值
    return result;
}

题目三:
在这里插入图片描述
分析
1)三数之和,固定三个数,nums[i],nums[left] , nums[right] 就是求nums[i] + nums[left] + nums[right];
2)这个三个数都要去重,nums[i]去重,nums[i] == nums[i - 1] 不能写成 nums[i] == nums[i +1];因为i+1是left;
3)left 和 right去重;nums[left] == nums[left + 1] ;nums[right] == nums[right - 1]

int comp(const void* a,const void* b){
    return *(int *)a - *(int *)b;
}

int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes)
{
    qsort(nums,numsSize,sizeof(int),comp);//排序

    int** res = malloc(sizeof(int*) * 18000);
    * returnSize = 0;
    int count = 0;
    for (int i = 0; i < numsSize; i++)  {
        int left = i + 1;
        int right = numsSize - 1;
        if(nums[i] > 0) continue;
        else if(i > 0 && nums[i]  == nums[i - 1]) continue;  //为啥是i-1要好好想想 i+1是left;
        else
        while (left < right) {            
            int sum = nums[i] + nums[left] + nums[right];
            if (sum > 0) {
                right--;
            } else if (sum < 0) {
                left++;
            } else if (sum == 0) {
                res[count]=malloc(sizeof(int) * 3);
                res[count][0] = nums[i];
                res[count][1] = nums[left];
                res[count][2] = nums[right];
                count++;
                //剪枝--如果出现相同nums[left]或nums[right]的情况,就跳过
                while (left < right && nums[left] == nums[left + 1]) {
                    left++;
                }
                while (left < right && nums[right] == nums[right - 1]) {
                    right--;
                }  
                left++;
                right--;
            }
        }
    }

    //设置返回参数
    *returnSize = count;
    *returnColumnSizes = malloc(sizeof(int) * count);
    for(int i = 0; i < count; i++) {
        returnColumnSizes[0][i]=3;
    }
    return res;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778811.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

K8S初级入门系列之一-概述

一、前言 K8S经过多年的发展&#xff0c;构建了云原生的基石&#xff0c;成为了云原生时代的统治者。我将用三个博客系列全面&#xff0c;循序渐进的介绍K8S相关知识。 初级入门系列&#xff0c;主要针对K8S初学者&#xff0c;以及希望对K8S有所了解的研发人员&#xff0c;重点…

【贪心算法part05】| 435.无重叠区间、763.划分字母区间、56.合并区间

目录 &#x1f388;LeetCode435. 无重叠区间 &#x1f388;LeetCode763.划分字母区间 &#x1f388;LeetCode 56.合并区间 &#x1f388;LeetCode435. 无重叠区间 链接&#xff1a;435.无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, …

【雕爷学编程】Arduino动手做(55)--DHT11温湿度传感器模块3

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

力扣C++|一题多解之数学题专场(2)

目录 50. Pow(x, n) 60. 排列序列 66. 加一 67. 二进制求和 69. x 的平方根 50. Pow(x, n) 实现 pow(x,n)&#xff0c;即计算 x 的 n 次幂函数&#xff08;即x^n&#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000 示例…

【SQL应知应会】表分区(五)• MySQL版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分区表 • MySQL版 前言一、分区表1.非分区表2.分区…

day42-servlet下拉查询/单例模式

0目录 1.Servlet实现下拉查询&#xff08;两表&#xff09; 2.单例模式 1.实战 1.1 创建工程&#xff0c;准备环境... 1.2 接口 1.3 重写方法 1.4 servlet 1.5 list.jsp list.jsp详解 2.单例模式 2.1 饿汉模式&#xff1a;在程序加载时直接创建对象&#…

8.4 利用集成运放实现的信号转换电路

在控制、遥控、遥测、近代生物物理和医学等领域&#xff0c;常常需要将模拟信号进行转换&#xff0c;如将信号电压转换成电流&#xff0c;将信号电流转换成电压&#xff0c;将直流信号转换成交流信号&#xff0c;将模拟信号转换成数字信号&#xff0c;等等。 一、电压 - 电流转…

【网络】socket——TCP网络通信 | 日志功能 | 守护进程

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《网络》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 上篇文章中本喵介绍了UDP网络通信的socket代码&#xff0c;今天介绍TCP网络通信的socket代码。 TCP &a…

Flutter系列(2):解决Flutter打包成APP无法访问网络资源

将flutter项目打包成Android后&#xff0c;发现无法访问网络图片&#xff0c;权限不足&#xff0c;没有授权网络权限&#xff0c;解决办法如下&#xff1a; 在android/app/src/main/AndroidManifest.xml中添加如下代码即可 <uses-permission android:name"android.perm…

c语言修炼之指针和数组笔试题解析(1.2)

前言&#xff1a; 书接上回&#xff0c;让我们继续开始今天的学习叭&#xff01;废话不多说&#xff0c;还是字符数组的内容上代码&#xff01; char *p是字符指针&#xff0c;*表示p是个指针&#xff0c;char表示p指向的对象类型是char型&#xff01; char*p"abcdef&q…

第一百一十四天学习记录:C++提高:类模板案例(黑马教学视频)

类模板案例 main.cpp代码&#xff1a; #include "myarray.hpp"void printIntArray(MyArray <int>& arr) {for (int i 0; i < arr.getSize(); i){cout << arr[i] << " ";}cout << endl; }void test01() {MyArray <int&…

AIGC分享交流平台、GPT-4、GPT实时联网、Claude

拥有无限畅谈的AI个人助理&#xff0c;提高效率和创造力&#xff0c;引领未来的智能生活&#xff1b; 不仅承载着最前沿的科技理念&#xff0c;更集成了对人工智能可能性的深度理解。 已支持基于GPT、Claude等主流大模型的对话内容生成、支持GPT联网查询实时信息&#xff1b;基…

241. 为运算表达式设计优先级

题目描述&#xff1a; 主要描述&#xff1a; 区间dp问题。 class Solution { public:vector<int> diffWaysToCompute(string expression) {vector<int> ops;for(int i0;i<expression.length();i){if(expression[i]>0&&expression[i]<9){int num…

Vue整体架构分解

Vue.js的整体架构可以分解为以下几个部分: 文章目录 1. 数据驱动2. 组件化3. 响应式系统4. 虚拟DOM5. 插件系统6. 单文件组件7. 模板编译总结 1. 数据驱动 Vue的一个核心特点是数据驱动。Vue会在初始化的时候给数据提供一个observe监听&#xff0c;当数据变化时&#xff0c;会…

醉梦仙踪:二叉树狂想曲,中序遍历的华丽穿梭

本篇博客会讲解力扣“94. 二叉树的中序遍历”的解题思路&#xff0c;这是题目链接。 如何对二叉树进行中序遍历呢&#xff1f;所谓中序遍历&#xff0c;即先遍历左子树&#xff0c;接着遍历根节点&#xff0c;最后遍历右子树的一种遍历方式。具体来说&#xff0c;假设有某一种“…

苹果11手机设置手机跟踪功能

苹果11手机设置手机跟踪功能&#xff0c;就算是手机丢了&#xff0c;也能通过查询手机定位在哪里。 第一步&#xff1a;点击Apple ID进入详情 第二步&#xff1a;点击“查找” 第三步&#xff1a; 第四步&#xff1a; 到了这步&#xff0c;就算是设置成功。 下面需要到官方查询…

【STL】 模拟实现简易 vector

目录 1. 读源码 2. 框架搭建 3. vector 的迭代器 4. vector 的拷贝构造与赋值 拷贝构造 赋值 5. vector 的常见重要接口实现 operator[ ] 的实现 insert 接口的实现 erase 接口实现 pop_back 接口的实现 resize 接口实现 源码分享 写在最后&#xff1a; 1. 读源码…

Rust 数据类型 之 类C枚举 c-like enum

目录 枚举类型 enum 定义和声明 例1&#xff1a;Color 枚举 例2&#xff1a;Direction 枚举 例3&#xff1a;Weekday 枚举 类C枚举 C-like 打印输出 强制转成整数 例1&#xff1a;Weekday 枚举 例2&#xff1a;HttpStatus 枚举 例3&#xff1a;Color 枚举 模式匹配…

opencv 图像距离变换 distanceTransform

图像距离变换&#xff1a;计算图像中每一个非零点距离离自己最近的零点的距离&#xff0c;然后通过二值化0与非0绘制图像。 #include "iostream" #include "opencv2/opencv.hpp" using namespace std; using namespace cv;int main() {Mat img, dst, dst…

【STL】模拟实现简易 list

目录 1. 读源码 2. 框架搭建 3. list 的迭代器 4. list 的拷贝构造与赋值重载 拷贝构造 赋值重载 5. list 的常见重要接口实现 operator--() insert 接口 erase 接口 push_back 接口 push_front 接口 pop_back 接口 pop_front 接口 size 接口 clear 接口 别…