看看谁效率高:找出给定数字,找出现次数文字串为:
1 2 3 5 4 3 2 5 5 7 3 2 4 5 2 3 22 12 19 15 1 2 3 5 4 3 29 15 22 12 19 15 1 2 3 ...
7 7 7 7 7 7 2 7 23 24 7 7 2 7 23 24 2 7 23 7 7 2 7 23...
5 1 7 5 2 3 22 12 13 2 5 2 3 22 12 13 2 ...
4 1 5 5 4 3 2 5 5 7 3 2 15 5 4 3 2 5 5 7 3...
给定数组要找的数字如: {2, 5, 3, 12}或 {3, 7, 9}等1. 计算出要找数字在给定字符串中(单行)共出现的次数。
2. 计算出要找数字在给哪行出现最多。(如{3, 7,9} 在第2行应该属出现最少,只有一个元素“7”出现)此贴Java, C++版各开一份,看看是不是常人所说的C++算法普强。
此分给算法最优的童鞋,大家在自己目前使用语言版发自己算法,和留下执行所耗时与CPU和内存多少。Java版贴
http://topic.csdn.net/u/20110731/20/813adbd5-7df5-4041-9f3a-f087d858f3ff.html
1 2 3 5 4 3 2 5 5 7 3 2 4 5 2 3 22 12 19 15 1 2 3 5 4 3 29 15 22 12 19 15 1 2 3 ...
7 7 7 7 7 7 2 7 23 24 7 7 2 7 23 24 2 7 23 7 7 2 7 23...
5 1 7 5 2 3 22 12 13 2 5 2 3 22 12 13 2 ...
4 1 5 5 4 3 2 5 5 7 3 2 15 5 4 3 2 5 5 7 3...
给定数组要找的数字如: {2, 5, 3, 12}或 {3, 7, 9}等1. 计算出要找数字在给定字符串中(单行)共出现的次数。
2. 计算出要找数字在给哪行出现最多。(如{3, 7,9} 在第2行应该属出现最少,只有一个元素“7”出现)此贴Java, C++版各开一份,看看是不是常人所说的C++算法普强。
此分给算法最优的童鞋,大家在自己目前使用语言版发自己算法,和留下执行所耗时与CPU和内存多少。Java版贴
http://topic.csdn.net/u/20110731/20/813adbd5-7df5-4041-9f3a-f087d858f3ff.html
解决方案 »
- 在继承自Cscrollview的视图中画矩形,在滚动时矩形花掉,有很多线条痕迹
- 怎样用MFC写一个Hello World程序?我应该建一个怎样的工程?
- ADO数据库操作的问题
- 如何重画Combox和CListBox控件的滚动条?
- 怎样修改一个可执行文件运行后在任务栏所显示的图标?
- 我想知道如何实现将图片存入数据库(access数据库,odbc连接),谢谢帮助!!急!!!!
- 如何将字符串转化为浮点数,如何将浮点数转化全自为字符串?在线.....
- 请指教,我想写这样的com
- 谁能给我推荐几本关于VC开发网络通讯嵌入式的书?
- 请教网卡通信
- OnPaint里的new后内存怎么办,在线等!!!
- 急:用GDI+画的图怎么看不到???
以第一个为例:
int num[] = {1, 2, 3, 5, 4, 3, 2, 5, 5, 7, 3, 2, 4, 5, 2, 3, 22, 12, 19, 15, 1, 2, 3, 5, 4, 3, 29, 15, 22, 12, 19, 15, 1, 2, 3}; // // 最大的数为:29,所以定义如下数组
int a[30] = {0};int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int num[] = {1, 2, 3, 5, 4, 3, 2, 5, 5, 7, 3, 2, 4, 5, 2, 3, 22, 12, 19, 15, 1, 2, 3, 5, 4, 3, 29, 15, 22, 12, 19, 15, 1, 2, 3}; // int a[30] = {0}; int fnd[] = {2, 5, 3, 12};
for(int i=0; i<sizeof(num)/sizeof(num[0]); i++)
{
++a[num[i]];
} for(int j=0; j<sizeof(fnd)/sizeof(fnd[0]); j++)
{
printf("%d : %d\n", fnd[j], a[fnd[j]]);
} return 0;
}
果然C++更生猛,回复都更快。
上次有听个人论过更优法。期待完美楼下各种大师继续
基于字符串,这样可以无视字符串长度和数字的位数了。#include "stdafx.h"
#include <map>
#include <string>
using namespace std;int Split(char* lpString, const char* split, map<string, int> &tokenList)
{
char *token = strtok( lpString, split );
while( token != NULL )
{
tokenList.insert( pair<string,int>(token,0) );
token = strtok( NULL, split);
}
return (int)tokenList.size();
}void Calculate(char* lpSrcString, const char* split, map<string, int> &destList)
{
char *token = strtok( lpSrcString, split );
map<string, int>::iterator iter = destList.begin(), iterEnd = destList.end();
while( token != NULL )
{
iter = destList.find(token);
if (iter != iterEnd)
iter->second++;
token = strtok( NULL, split);
}
}int _tmain(int argc, _TCHAR* argv[])
{
char source[] = "1 2 3 5 4 3 2 5 5 7 3 2 4 5 2 3 22 12 19 15 1 2 3 5 4 3 29 15 22 12 19 15 1 2 3";
char find[] = "2 5 3 12";
map<string, int> dest;
char* token = " ";
Split(find, token, dest);
Calculate(source, token, dest);
map<string, int>::iterator iter = dest.begin(), iterEnd = dest.end();
for (iter; iter != iterEnd; iter++)
{
printf("%s : %d \n", iter->first.c_str(), iter->second);
}
system("pause");
return 0;
}
那个,我打开你一楼JAVA的链接,似乎版面不对吧?
看到的版面属性是“CSDN-CSDN社区-高性能开发-高性能WEB开发”
//C# 来凑个热闹
void Main()
{
var num=new int[] {1, 2, 3, 5, 4, 3, 2, 5, 5, 7, 3, 2, 4, 5, 2, 3, 22, 12, 19, 15, 1, 2, 3, 5, 4, 3, 29, 15, 22, 12, 19, 15, 1, 2, 3}; var fnd = new int[]{2, 5, 3, 12};
var result=num.Where(n=>fnd.Contains(n)).Count();
Console.WriteLine(result);
}
如果字符串,有没有更优化点的?
for(int i=0; i<sizeof(num)/sizeof(num[0]); i++)
{
改成类似,申明数组也改成相应的字符串。
for(int j=0;j<fnd.length;j++)
if(num[i]==fnd[j])){
++a[j];break;
}else continue;
//-----最后的改。对字符串类似的有没有更好的优化:)
//java版真是死水
fnd[j], a[j]