• Day 21


    第350题:

    给定两个数组,编写一个函数来计算它们的交集。来源:力扣(LeetCode)

    示例 1:

    输入: nums1 = [1,2,2,1], nums2 = [2,2]
    输出: [2,2]
    示例 2:

    输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    输出: [4,9]
    说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。

    1、求两个数组的交集,就是判断数组内有多少个相同的元素,

      直接用哈希表将长的数组内的元素和此元素个数作为key和valueput进hashmap中;

      然后遍历数组二,当里面出现一个hashmap里面有的元素,就将hashmap中这个key对应的value-1;

      所以不管有没有重复的相同元素,也可以取出来,用数组接收;

      最终返回所需结果。

      

    2、也可以先将两个数组排好序,然后用两个指针分别遍历两个数组,就可以得出两个数组的交集了。

      

    第29题:

    给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

    返回被除数 dividend 除以除数 divisor 得到的商。

    整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2来源:力扣(LeetCode)

    1、求被除数除以除数的商,不能使用乘法除法和mod运算符;

      其实就是运算被除数里面包含了count个除数,可以用单纯的一个一个减来得出结果,但是好像时间超出限制;

      对于结果的正负,可以设置一个标志位来直接判断;

      由于数值的范围为int类型,所以可以将被除数和除数都转换为负数(因为有标志位,所以不妨碍结果);

      对于被除数和除数,可以使用被除数减去2^n个除数来计算count个数,可降低运行时间;

      先求出被除数可蕴含除数的最大个数,按照二次幂个数相加;

      例如被除数时11除数是3时,3<11,所以count肯定可以=1,所以将3翻倍,count也翻倍,得到6,6也<11,所以count肯定也可以等于2;

      当此时再次翻倍时,除数变为了12,但是12>11,所以除数和count不能再增加了,所以被除数=11-6=5;

      这时候就可以将5作为被除数来和除数3再次计算余下的count个数,求处累加到上面的count,得出最终结果;

      最后以标志位来判断count的正负。

      

    第35题:

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。(来自LeetCode)

    1、直接遍历数组,将插入位置找到。

      

    2、利用二分查找寻找插入位置。

      

  • 相关阅读:
    Log4net中的RollingFileAppender解析
    TortoiseSVN使用简介
    ALinq 入门学习(四)查询关键字
    ALinq 入门学习(五)删除修改数据
    ALinq 入门学习(五)插入数据
    C# 委托知识总结
    sql 分页
    C# 数据结构常用术语总结
    ALinq 入门学习(三)Where 条件查询
    ALinq 入门学习(六)Join 连接查询
  • 原文地址:https://www.cnblogs.com/liang-yi-/p/13295173.html
Copyright © 2020-2023  润新知