几个小题

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<<"\n打印被抽调的值\n";
    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 << "\n打印排序之后的值\n";
    for (int i = 0; i < size; ++i)
    {
        cout << arr[i] << endl;
    }

    cout << "\n开始从头遍历,直到找到第一个重复的\n";
    for (int i = 0; i < size - 1; ++ i)
        if(arr[i] == arr[i + 1])
        {
            cout << "\n第一个重复的元素为: " << 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
  

运行结果

几个小题

时间: 2024-10-14 14:06:27

几个小题的相关文章

关于js中全局变量和局部变量的寄到小题

往往最基本的也是最根本的. 这里有三道关于全局变量和局部变量的小题,供诸位一阅. 知识点: (1)在最外层声明的是全局变量 (2)在函数内声明的是局部变量 (3)在函数体内部,但是没有用var声明的变量也是全局变量 第一题: var a = 10;function fun(){var a = "global";}console.log(a); 第二题: var a ;function fun(){a = "global";} fun();console.log(a)

关于SQL的几道小题详解

关于SQL的几道小题详解 当我们拿到题目的时候,并不是急于作答,那样会得不偿失的,而是分析思路,采用什么方法,达到什么目的,还要思考有没有简单的方法或者通用的方法等等,这样才会达到以一当十的效果,这样的惯性思维其实早在我们度高中的时候就被领教了,所谓“万变不离其宗”吧.以下各题来自日常所见,或QQ群,或面试题,或博客园. 题目一:如下表所示,现需要按照收款员统计收款和退款合计金额. 实现结果需如下显示: 分析:想要的结果(记为表B)和源数据(记为表A)相比,有共同的列(收款员),不同的是表A的金

关于理解python类的小题

今天看了python部落翻译的一篇<一道python类的小题>文章,感觉挺有启发性,记录下来: 1 print('A') 2 class Person(object): 3 print('B') 4 def __int__(self,name): 5 print('C') 6 self.name = name 7 print('D') 8 print('E') 9 10 11 p1= Person('name1') 12 p2 = Person('name2') 输出结果: A B D E C

递归小题中的空间换时间思想

题目: 如数: 1  1  2  3   5   8   13   21  34  55 ...... 序号: 0  1  2  3   4   5   6     7    8    9 ...... 由用户输入序号,输出对应的数值. 效果: 实现代码: #include <stdio.h> int bian(int num); //static int shu[100]={1,1}; int main() { int num; while ( printf("请输入编号数:&qu

逛园子,看到个练习题,小试了一把(淘宝ued的两道小题)

闲来无事,逛园子,充充电.发现了一个挺有意思的博文,自己玩了一把. 第一题:使用 HTML+CSS 实现如图布局,border-widht 1px,一个格子大小是 60*60,hover时候边框变为橘红色(兼容IE6+,考虑语义化的结构) 效果图: 简单分析一下: 使用伪类 :hover的时候相对定位 改变z-index, 代码如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta c

Linux 的面试小题 9

一.选择题(24分,每小题3分) 1. 操作系统是一组什么( C ) A.文件管理程序  B.中断处理程序 C.资源管理程序  D.设备管理程序   解释:在一个计算机操作系统中,通常含有多种硬件和软件资源.归纳起来可将这些资源分为四类:处理机.存储器.I/O设备以及文件(数据和程序).相应的,OS的主要功能也正是对这四类资源进行有效的管理.处理机管理是用于分配和控制处理机:存储器管理主要负责内存的分配与回收:I/O设备管理是负责I/O设备的分配(回收)与操纵:文件管理是用于实现对文件的存取.共

小题解析

前两天一位朋友留言问了我关于js的小题,其实在这位朋友之前曾经也有人询问过此类题,思前想后觉得写出来给那些还正在解答此题中的朋友们.   原型 var add = function (m) { var temp = function (n) { return add(m + n); } temp.toString = function () { return m; } return temp; }; add(3)(4)(5); // 12 add(3)(6)(9)(25); // 43 这个ad

前端笔试小题

/*一.变量作用域一道小题*/var x='a';function printX(){ console.log(x); var x='b'; console.log(x);}printX(); var y='c';function printY(){ console.log(y); y='d'; console.log(y);}printY();//输出结果undefined,b,c,d /*二.输出结果*///alert(null instanceof Object);//alert(null

一道小题:从一个数组里产生所有可能的乘积组合

比如给定一个数组[2,3,11] 要求产生[1,2,3,6,11,22,33,66] 观察可得:[2,3] 产生了[1,2,3,6] 的乘积可能.当加入11时,11会和现有的每一个元素都相乘得到[1,2,3,6,11,22,33,66] public static void allProducts(int[] arr) { List<Integer> list = new ArrayList<Integer>(); list.add(1); for(int i=0; i<ar