IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode 1.两数之和——扩展知识点:哈希 -> 正文阅读

[数据结构与算法]LeetCode 1.两数之和——扩展知识点:哈希

关键词:哈希

来学走路,写代码不熟练就是0。加黑的是出了疑问的地方。

想的很复杂,但是手笨,那不行,先来个最简单的无脑N2
python的if for不打括号
for i in range(int1) 或 range(int1,int2)
python3函数格式示例 def haha(self, aa:int, bb:List[int]) -> List[int]:

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        findflag=0
        for i in range(len(nums)):
            for j in range(i+1,len(nums)):# j从i+1开始找,range可以这么用
                #题中确保了已有这两个数且必须是不同的两个数
                if nums[i]+nums[j]==target and i!=j: 
                    findflag=1
                    break
            if findflag==1:
                break
        return [i,j]

看一下怎么优化

字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }

官方给出哈希表。如果用c写要自己写算法。

for i, item in enumerate(xx)
Python 字典 in 操作符用于判断键是否存在于字典中,如果键在字典 dict 里返回 true,否则返回 false。 not in 相反
在Python中,字典是通过散列表或说哈希表实现的。

python3:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashtable=dict()
        # 命名最好不要用相近的 num建议改item等
        for i,num in enumerate(nums):
            if target-num in hashtable:
                return [hashtable[target-num],i]
            hashtable[nums[i]]=i #题目已确保是两个数,答案需要下标,下标做value 写在后面可以少一次写入

再用c写一次,看了标答我才知道有个库uthash.h可以直接用,干脆把哈希一起看了。
c语言下uthash库的使用1:基础用法2:详解,以及删除等更多函数,还不太会用,可以做这篇里的练习题,有必要的话 😛

typedef struct my_hash{
    int key;
    int val;
    UT_hash_handle hh;
}my_hash;

my_hash *table=NULL;

my_hash* hashFind(int ikey)
{
    my_hash *s=NULL;
    HASH_FIND_INT(table,&ikey,s);
    return s;
}

void hashInsert(int ikey, int ival)
{
    my_hash* s=hashFind(ikey); 
    if(s==NULL){ //本题可以不管数字重复情况,重复情况见下面哈希补充知识点
        s=malloc(sizeof(*s));
        s->key=ikey;
        s->val=ival;
        HASH_ADD_INT(table,key,s); //注意这里!第二个参数写结构体内的变量名,详见定义
    }
}

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    table=NULL; //初始化指针好习惯!
    for(int i=0;i<numsSize;i++){
        my_hash *s=hashFind(target-nums[i]);
        if(s!=NULL){ //key-num val-下标
            *returnSize=2;
            int* ret=malloc(sizeof(int)*2);
            ret[0]=s->val;
            ret[1]=i;
            return ret;
        }
        hashInsert(nums[i],i);
    }
    *returnSize=0;
    return NULL;
}

此外,一对多的哈希怎么办?
还没看完,看完再找两道哈希的算法和面试题)——初步:开放定址法链地址法;进阶:多阶哈希表、一致性哈希123

c++/java/golang的之后再补,为了熟悉各语言基本用法

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:59:49  更:2022-10-17 13:01:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/29 17:26:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码