zoukankan      html  css  js  c++  java
  • 算法06

    哈希函数的特性:

    • 哈希函数的输入是无穷的
    • 哈希函数的输出是有限的
    • 哈希函数对于同一个数据,返回的结果是一样的,不是随机的
    • 由于输入是无穷的,输出是有限的,则必然多个输入会对应同一个输出
    • 哈希函数的返回具有离散型,对于很多个不同的输入,一定会出现相同的输出,相同的输出具有均匀分布的特点 (加入输入是(0,99),输出是(0,1),那么输出的 0 1 会均匀分布) 
    • 补充:哈希函数有很多种,内部的结构很复杂,假如我们需要一千种不同的哈希,我们是不是要找一千种哈希函数,其实不需要,我么可以根据一个哈希函数得到我们想要的一千种结果。假如哈希函数返回一个16位的16进制的数,我们可以分为 H1 = 高八位,H2 = 低八位  H(新) = H1 + bH2 ,b的值可以所以改变,现在得到的新的哈希值和原来的哈希值不具备正向相关。

    实力不够,以后接着写

    。。。。。。。。。。。。。。。。。。。。。。。。。

    求最大连续子串的和:一个循环,如果求到某个值是个负数,则舍弃前面的数。

    #include<iostream>
    using namespace std;
    
    int main()
    {
        int a, b[100];  //a代表输入数字的长度  b用来接收数字
        cin >> a;
        for (int i = 0; i < a; i++)
        {
            cin >> b[i];
        }
        int item = -99999, thissum = 0;
        for (int i = 0; i < a; i++)
        {
            thissum += b[i];
            if (thissum < 0)
            {
                thissum = 0;
            }
            if (thissum > item)
            {
                item = thissum;
            }
        }
        cout << "最长子序列:" << item<<endl;
        return 0;
    
    }
    View Code

     最小和问题:一个数字数组,下标为0的数如果比下标为1的数小,则下标为0的数是最小和,下标为最后一个数的数比下标为最后一个数的前一个数的数小,则下标为最后一个数的数是最小和,其次下标不是最后和最前的数必须比他两端的数还要小才是最小和,给出一个这样的数组,求出任意一个最小和,我们可以使用二分来做这个题

    #include<iostream>
    using namespace std;
    
    int main()
    {
        int a, b[100]; //a表示这个数字数组的的长度,b用来存贮这组数字,这些数字不会重复
        cin >> a;
        for (int i = 0; i < a; i++)
        {
            cin >> b[i];
        }
        int lef = 0;
        int rit = a - 1;
        int min,mid;
        if (b[lef] < b[lef + 1])
        {
            min = b[lef];
        }
        else if (b[rit] < b[rit - 1])
        {
            min = b[rit];
        }
        else
        {
            while (lef < rit)
            {
                mid = lef + ((rit - lef) >> 1);
                if (b[mid] < b[mid + 1] && b[mid] < b[mid - 1])
                {
                    min = b[mid];
                    break;
                }
                else if (b[mid] > b[mid + 1])
                {
                    lef = mid;
                }
                else
                {
                    rit = mid;
                }
            }
        }
        cout << "最小和:" << min << endl;
        return 0;
    }
    View Code
  • 相关阅读:
    leetcode 122. Best Time to Buy and Sell Stock II
    leetcode 121. Best Time to Buy and Sell Stock
    python 集合(set)和字典(dictionary)的用法解析
    leetcode 53. Maximum Subarray
    leetcode 202. Happy Number
    leetcode 136.Single Number
    leetcode 703. Kth Largest Element in a Stream & c++ priority_queue & minHeap/maxHeap
    [leetcode]1379. Find a Corresponding Node of a Binary Tree in a Clone of That Tree
    正则表达式
    十种排序算法
  • 原文地址:https://www.cnblogs.com/luojianyi/p/9642738.html
Copyright © 2011-2022 走看看