zoukankan      html  css  js  c++  java
  • 数学知识对写程序有用吗?

    对于这个标题,答案我是持肯定态度的,有的人可能说数学一般用于解决一些高端算法,我们测试脚本,哪用得上啊,其实也不然,适当的思考,适当的运用一些数学知识,可以使我们的测试脚本更加的有档次,效率也会更高,或者说也会更加易懂,我们来看一下下面这个方法:

    计算从1加到100的值。

    估计我们做测试的,很多人第一眼想到的就是用一个for循环,然后sum +=i; 这样就可以得出值了,有的人还可以再加以改善后,搞成一个通用的方法,可以计算任何连续块的值。这些都是OK的,都可以得出结论,但是,换个思路,如果用到数学中的一个公式:
    (上底+下底)*高/2,利用这个公式,稍微的改下代码,判断下长度的奇偶,即可以得出结果,没用到任何循环,这个的效率显然要快,且应该也更易懂吧?

    可能有的人会觉得这个例子不够直接,我们再来看下面的一道题:
    有一个数组,任意移动K位后,输出数组,比如[1,2,3,4,5],移动两位后,就是[4,5,1,2,3].

    如果在面试中,碰到这个题,你会如何解?告诉面试官,循环K次,每次重新的去计算数组?如果答案是这样,估计面试分数会有所影响。我们不妨来分析下:

    1. K位,这个K位可以大于数组长度,也可以小于数组长度,上面的数组中,移动5次后,就与原始数组一样的了,所以,5是一轮,如果K等于6,实际上与移动1位是一样的效果,所以,我们只需把K与数组长度取模,即可得出实际要移动的位数了。

    2. 得出移动位数后,我们就可以循环数组,然后根据当前的index与移动位数的关系,来产生一个新的数组

    3. 当前index与移动位数的关系:实际移动位数+当前index,小于与大于的处理关系是不一样的,大于时,要减去数组长度,否则,就会越界了!

    最后来看一下具体的代码:

    package com.demo;
    
    public class Test16 {
    
    	public void reindexArray(int[] arr, int step) {		
    		int len = arr.length;
    		int s = step % len;
    		int[] a = new int[len];
    		for (int i = 0; i < len; i++) {
    			if(i+s<arr.length){
    				a[i+s] = arr[i];
    			}else{
    				a[i+s-len] = arr[i];
    			}
    		}
    		for (int i : a) {
    			System.out.println(i);
    		}
    	}
    	
    	public static void main(String[] args) {
    		Test16 t = new Test16();		
    		t.reindexArray(new int[] { 1, 2, 3, 4, 5 }, 2);
    	}
    
    }
    

     所以,数学好的人,对于写程序是有很大帮助的!

    以上只是我的个人观点,请大家多多指教!

  • 相关阅读:
    【题解】【HAOI2011】Problem b
    【题解】完全平方数
    sqoop安装
    hive安装
    hbase分布式安装
    zookeeper分布式安装
    hadoop分布式安装
    zabbix proxy安装及使用
    web数据存储
    js格式
  • 原文地址:https://www.cnblogs.com/zhangfei/p/4511574.html
Copyright © 2011-2022 走看看