• 几个小题


    1、从一个数值连续的数组中,抽调n个元素,查找抽调的是哪几个

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        int a[100] = {0};  //抽掉3, 4, 57
        int b[100] = {0};  //原始数组, [0, 99]
    
        for (int i = 0; i < sizeof(a) / sizeof(a[0]); ++ i)
        {
            if (i > 2 && i < 55) 
                a[i] = i + 2; 
            else if (i >= 55)  
                a[i] = i + 3; 
            else 
                a[i] = i;
     
            b[i] = i;
        }
     
        const int N = 3;
    
        int arr[N] = {0};
        int nIndex = 0;
        int k = 0;
        int j = 0;
    
        for ( k = 0,   j = 0; 
            k < (sizeof(a) / sizeof(a[0]) - N) && j < sizeof(b) / sizeof(b[0]); ++ j)
        {
            if (a[k] != b[j]) 
                arr[nIndex++] = b[j]; 
            else
                ++ k;
    
            if (sizeof(arr) / sizeof(arr[0]) == nIndex) 
                break; 
        }
    
    
        cout<<"
    打印被抽调的值
    ";
        for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++ i)
            cout << arr[i] <<endl;
    
    
        return 0;
    }

    运行结果

    2、一个数组a[n + 1], 元素的值域为[1, n],找出任意一个重复的元素

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    /************************************************************************/
    /* int型数组arr[n + 1], 数组元素的值域为[1, n]
    求任意重复的数字
    
    思路:
    先快排, O(nlogn), 然后从头遍历,找到第一个a[i] == a[i +1]的即为第一个重复
    的最小(大)值元素
    /************************************************************************/
    
    int Partition(int arr[], int low, int high)
    { 
        int i = low;
        int j = high;
        int priovt = arr[i];  
    
        while(i < j)
        { 
            //从右边找第一个小于privot的元素,将其放在low的位置
            while(i < j && arr[j] >= priovt)  --j;  
            if(i < j)
                arr[i] = arr[j];
    
            //从左边找第一个大于privot的元素,将其放在high的位置
            while(i < j && arr[i] <= priovt) ++ i;
            if(i < j)
                arr[j] = arr[i];  
        }
    
        arr[i] = priovt;
    
        return i; 
    }
    
    
    void QuickSort(int arr[], int low, int high)
    {
        if(NULL == arr)
            return; 
        
        if (low < high)
        {
            //分成两部分
            int nPos = Partition(arr, low, high);  
            QuickSort(arr, low, nPos - 1);
            QuickSort(arr, nPos + 1, high);  
        } 
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        //arr有6 + 1个元素, 值域为[1, 6]
        int arr[] = {3, 1, 2, 4, 5, 6, 3};
        int size = sizeof(arr) / sizeof(arr[0]);
    
        QuickSort(arr, 0, size - 1);
    
        cout << "
    打印排序之后的值
    ";
        for (int i = 0; i < size; ++i)
        {
            cout << arr[i] << endl;
        }
    
        cout << "
    开始从头遍历,直到找到第一个重复的
    ";
        for (int i = 0; i < size - 1; ++ i)
            if(arr[i] == arr[i + 1])
            {
                cout << "
    第一个重复的元素为: " << arr[i] << endl;
                break;
            }
    
        cout << endl << endl;
    
          
        return 0;
    }

    运行结果

    3、表如下, 找出日期在2014年8月2日以后,操作次数超过(含)3次的用户

     select * from (
      select usr, count(usr) as times from tbl_users where dt>'2014-08-02'  group by usr ) t 
      where times >= 3
      

    运行结果

     

     另外一个问法:查询操作次数大于等于3的用户    

      select usr, count(usr) as counts from tbl_users   group by usr  having count(usr)>=3
    
    --在SQL SERVER(作者版本为2008 R2)中不支持下面的写法
      select usr, count(usr) as counts from tbl_users   group by usr  having counts>=3
    
    上面这种写法在MYSQL中是支持的

       

  • 相关阅读:
    nginx 添加response响应头
    2018年 js 简易控制滚动条滚动的简单方法
    handsontable 常用 配置项 笔记
    使用react-handsontable
    node 常用模块及方法fs,url,http,path
    POST application/json 适用于传递多层的json
    react 子元素修改父元素值的一个偏方,虽然简单,但是不建议用,
    mysql 连接出错 'mysqladmin flush-hosts'
    solr7.3.1定时增量索引
    mysql8修改密码加密方式
  • 原文地址:https://www.cnblogs.com/cuish/p/3896139.html
Copyright © 2020-2023  润新知