几个小题
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
运行结果
另外一个问法:查询操作次数大于等于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中是支持的
**********************技术交流请 email:cuihao0532#163.com 欢迎转载,转载请注明出处!***************************** 如果对本文满意请扫描文章左侧【二维码添加微信】获取更多好玩、有趣、有益、有营养的料,
你我共同成长!Y(^_^)Y
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗