有道难题第一题非OO解,极端记录160ms

测试平台:

P8600 4G

目前看见最高效率的是夜咖啡的,我这里的数据是稳定在195-200ms上下。

然后是eaglet,基本是400ms

我这个代码稳定在170ms左右

我的这个代码主要思路

1、在原有数组外围增加一圈0,这样就降低了统计时候的复杂度

2、将一维字符串数组转换为一个字符串,其实这也是增加0的副产品,如果有朋友能维持一维字符串 数组并增加0请告知一下

3、在最后的一维数组中直接用坐标计算方式算出当前位置的相关8个下标并直接计算

4、累加后统一减384,而不是每次减'0'字符

基本就这些特色了。

自己觉得比较有意思的特色是搞成一维数组来解决,呵呵。 其实看看大家的东西都能有不少收获的

少废话,上代码

static public int countSpecialNumbers(string[] field, int A, int B)
{
int count = 0;
//因为加了一圈0以后整体行列数发生了变化
int cols = field [0].Length+2;
int rows = field.Length+2;

//将原有一维字符串数组进行转换并增 加0
string s=string.Concat(new string('0', cols + 1), String.Join("00", field), new string('0', cols + 1));

int number;
int up, down;
int cur;
int i, j;
//分别从1开始循环并到新的行列-1处终止,仅计算需要计算的
//不 循环外圈的0
for ( i = 1; i < rows-1; i++)
{
for ( j = 1; j < cols-1; j++)
{
//cur,当前位置
cur = i * cols + j;
//上一行位置
up = cur - cols;
//下一行位置
down = cur + cols;
number = s[up - 1] + s[up] + s[up + 1] + s[cur - 1] + s[cur+ 1] + s[down - 1] + s[down] + s[down + 1] - 384;
if (number >= A && number <= B)
{
count++;
}
}
}
return count;
}

时间: 2024-09-08 10:12:48

有道难题第一题非OO解,极端记录160ms的相关文章

关于某道C#上机题的OO

前两天在园子里,有人出了一道<关于一道C#上机题的一点想法>,大概的意思呢是利用OO的思想来进行编程,接着又有一位朋友,也写了自己的答案,此朋友非常厉害,从类图,接口,封装,多态,都一一实现,实在让我佩服,不过真有点过度设计的味道,接着又有一大虾,完成了自己的OO答案,把泛型,可变,不可变都一一列举,实在令人佩服啊,可我觉得,或许是我理解错了,但我觉得三位,你们都偏离了题目,偏离了OO,你们只是利用了OO的特性. 题目 17个人围成一圈,从第一个人开始报数,报到3的退出,一直到剩下最后一个人,

有道难题第二题最新算法(不仅仅是速度)

最近好像算法问题又不热门了,米关系,自己喜欢就好.我的有道第二题不是双倍超立方,也不知道是什么算法,大概的题目意思,大家可以参考:"我的有道第二题(不是双倍超立方)"   其实一开始我觉得很简单,我写的第一个解法也是正确的,不过讨厌在题目说,输入的n可以为2,000,000,000. 20亿.....如果N为最大的时候,不用看了,我的解法直接out,第一时间很长,第二,直接out of Memory   那该怎么做呢???我寻思着它的规律,其实一直有种感觉,可一直把握不住,而且平时也没

C#上机题的OO

前段时间看到某人<关于某道C#上机题的OO> ,后来又有人用了装饰模式做这题,我这里来个策略模式,不习惯废话直接上代码,不知道算不算策略模式,请高人指点. 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 namespace ConsoleApp 5 { 6 public class Program 7 { 8 static void Main(string[] args) 9 { 10 Gam

一个道c++的题(用c++做,要详细代码)

问题描述 一个道c++的题(用c++做,要详细代码) 有三个海军陆战队wilyin的基地.他们的位置形成一个直角三角形.现在wilyin得到另一个海洋他想把它放在某个地方形成一个矩形与前三名海军陆战队员.他应该把它放在哪里?输入输入的第一行包含一个整数T这意味着测试用例的数量.然后T行每一行包含6个正整数x1y1x2y2 x3y3这意味着这三个海军陆战队员的位置.你可能认为不协调的绝对值超过3000人.输出对于每个案例打印出来的协调海洋在一行.输入20 0 1 0 0 10 1 0 -1 1 0

支付宝的几道笔度题,大家交流一下!

问题描述 1已知long型的最大值为9223372036854775808,求9223372036854775808+92233720368547758082在命令行下输入"Ilovechina",则publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubSystem.out.println(args[0]);;System.out.println(args[1]);;System.out.println(arg

欧拉项目【ProjectEuler】系列-第一题

欧拉项目[ProjectEuler]系列-第一题 ----人既无名 既然是第一次,当然要写个基本的介绍咯. 欧拉项目是一系列挑战数学/计算机编程的问题. 需要的不仅仅是数学见解,还要利用计算机编程技巧,需要解决大多数问题,当然,数学帮助你运用优雅而有效的方法,实现漂亮而快速的代码. 欧拉项目的网站是http://projecteuler.net,只要上去注册一个账号就可以开始你的欧拉之旅了,当你把一个问题解决之后就可以参加该问题的讨论,说说你的解决办法,看看其他人的处理思路咯.言归正传,开始欧拉

leetcode第一题java代码报错。求原因?

问题描述 leetcode第一题java代码报错.求原因? package com.hust.ali.test; import java.util.*; /** 给定一个整数数组,发现两个数字,使得它们添加到一个特定的目标数. 函数twoSum应返回两个数字,使得它们加起来的目标,其中索引1必须小于索引2的所有. @author Cat */ public class TwoNumSum { /* @param args */ public static void main(String[] a

杭电oj第一题居然一直过不了

问题描述 杭电oj第一题居然一直过不了 #include "stdio.h" int main() { int a,b; scanf("%d%d",&a,&b); printf("%d ",a+b); return 0; } 运行不是好好的吗,怎么总是过不了 解决方案 杭电OJ第十五届ACM第一题 Hearthstone杭电第一题 解决方案二: 检查一下自己的输入输出格式 解决方案三: (a+b)呢,....

“有道难题”举办 周枫互联网发展趋势

近日,据腾讯报道,由网易有道举办的2012"有道难题"开放日成功举行,网易公司高级副总裁周枫在会上表示:移动客户端是未来互联网发展的趋势.网易愿意将这些技术和经验带到蓬勃发展的市场,同时帮助有潜力.有资质的人才实现技术梦想,这无疑给那些心怀理想的创业者又注射了一针强心剂. 据了解,2012有道难题自报名以来就吸引众多技术达人和高校学生的关注.截止目前,已经有超过3000支团队报名参加本届创新大赛,报名学生团队来自清华大学.北京大学.复旦大学.南京大学.中山大学等全国41所重点高校. &