• K


    Leetcode 有几个题目, 分别是 2sum, 3sum(closest), 4sum 的求和问题和 single Number I II, 这些题目难点在于用最低的时间复杂度找到结果

    2-sum

    IO : 给定 vector 和 target, 从 vector 中寻找两个元素, 其和等于 target

    思路

    1. 哈希法. 先假设给定 vector 和 target 都不小于0. 设置 target 个桶(0...target-1), 把 vector 中的元素 e 放到第 (e%target) 个桶中. x+y = target. y 就在第 target- x%target 个桶中. 这样当寻找一个元素的另一半时, 只需要到特定的桶里去找了. 这种做法适合于target 不太大同时 vector 中的元素分布较为均匀时才比较好. 当vector 中有小于 0 的元素时, 就对所有元素和target同时加上 minValue.

    2. 先排序后查找. 设置两个游标 cur1, cur2 分别指向数组的第一个和最后一个元素, 当 vector[cur1]+vector[cur2] > target 时, cur1++. 否则 cur2--, 直到找到和等于 target 的两个元素

    3-sum

    IO : 给定 vector 和 target, 从 vector 中寻找三个元素, 其和等于 target

    思路

    1. 把 3-sum 问题看成是 2-sum 问题的扩展. 先枚举第一个元素 e , 然后问题转化为从vector中找到两个元素, 其和等于 target-e.value

    细节

    1. 第一次做的时候, 我简单的在 3-sum 的函数中嵌套了个 2-sum 的代码. 因第一个元素已被枚举, 所以 2-sum 函数进行查找的时候加上了判断条件, 结果使得修改后的 2-sum

    函数变得非常乱, 且有重复计算, debug 花了很长时间. 后来参考别人的代码, 发现只要外面一层 for(i) 循环, st = i+1, 里面用了 while(st<ed) 即可, 省去了很多判重语句. 判重语句是越少越好的

    3-sum closest

    IO : 给定 vector 和 target, 从 vector 中寻找三个元素, 其和最接近 target

    思路

    1. 这自然是 3-sum closest 的扩展, 只需要在 while 循环中加上一个记录当前/全局最小距离的两个变量即可

    2. 我一直想把这个做法和二分逼近联系到一起, 不过还是证明不出. 我想这应该不算是二分逼近, 反倒是一个不停测试的过程 

    4-sum 

    IO : 给定 vector 和 target, 从 vector 中寻找四个元素, 其和等于 target

    1. 预处理, 枚举 vector 中所有的二元和, 然后将题目转化为找出两个二元和, 其值等于 target

    Single Number I

    IO : Given an array of integers, every element appears twice except for one. Find that single one

    思路

    1. 每个元素出现两次, 那么两个元素相减, 最后剩下的就是所求. res = a[i] - res; 

    2. 将减法换成异或运算 res = a[i] ^ res;

    Single Number II

    IO : Given an array of integers, every element appears three times except for one. Find that single one

    思路:

    1. 设置一个 大小为 32 (int 为 4byte) 的桶, 若 integer 在第 i 位为1, 则第 i 个桶数字加 1. 最后, 把桶里不是 3 的倍数的那些 1 组合起来拼成结果

  • 相关阅读:
    redisTemplate
    HttpURLConnection下载文件流
    Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
    https请求
    将一个 JavaBean 对象转化为一个 Map
    Redis实现简单消息队列
    Spring Boot RestTemplate文件上传
    获取java栈异常
    获取 *.properties配置文件内容
    java格式化json串
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3417132.html
Copyright © 2020-2023  润新知