zoukankan      html  css  js  c++  java
  • 刷题感悟

    最近稍微有点懈怠了 刷题不勤了 勉励下自己

    这道题目挺有意思的 

    We are playing the Guess Game. The game is as follows:
    I pick a number from 1 to n. You have to guess which number I picked.
    Every time you guess wrong, I'll tell you whether the number I picked is higher or lower.
    However, when you guess a particular number x, and you guess wrong, you pay $x. You win the game when you guess the number I picked.

    自己踩了两下坑 

    坑1:首先没有考虑到大数的权重  以为是最少次数为最优 因此将其作为简单的二分查找来进行 

    错误代码如下:

            // int sum=0;
            // int m = (int) (n)/2;
            // while(n-m>1){
            //     sum=sum+m;
            //     m=(int)(n+m)/2;
            // }
            // return sum;

    简单除暴的反了错误 。而后反思对代码改进踩到了第二个坑

    坑2:过于关注大数的权重,解决思路为:将n个数按照和分成几乎相等的两部分 然后取小数部分来进行不断的叠加

       问题所在 :无法证明小数部分最终结果一定会大于大数部分 。因此该思路部分结果错误

    错误代码如下:

      //     if(n==1)return 0;
        //     if(n==2)return 1;
        //     if(n==3)return 2;
        //  int m=selectm(n,1);
        //  int sum=m;
        //  while(n-m>0){
        //      if(n-m==1)m=selectm(m,1);
        //      else
        //      m=selectm(n,m);
        //      sum=sum+m;
        //  }
        //  return sum;
        // }
        // public int selectm(int n,int m){
        //  int sum = (n-m+1)*(n+m)/2;
        //  int count=0;
        //  for(;m<n;m++){
        //      count = count+m;
        //      if(count*2>=sum){
        //          return m;}
        //  }
        //  return m;

    经过反思查找相关质料后发现 其实这道题就是一个典型的Floyd算法 从1-2距离开始不断的二分 选取值与原有的数据比较 得到较小值。

    注意点:

    1.传入的值是n 数组的大小最好未n+1 X n+1

    2.从什么时候开始迭代 起始位置当从2-1开始 3-2,3-1,4-3,4-2,4-1,如此顺序进行。

    3.当两个位置相邻时 大小当为较小数。

    代码如下:

    public int selectn(int n){
        int[][] p = new int[n+1][n+1];
        for(int i=2;i<n+1;i++){
            for(int j=i-1;j>0;j--){
                int globalmin=10000;
                for(int k=j+1;k<i;k++){
                    int leftsum = (p[j][k-1]>p[k+1][i])?p[j][k-1]:p[k+1][i];
                    int sum = k+leftsum;
                    globalmin=(globalmin>sum)?sum:globalmin;
                }
                p[j][i]=(j+1==i)?j:globalmin;
            }
        }
        return p[1][n];
  • 相关阅读:
    Hybrid 实验
    Access+Trunk 配置
    JS 超类和子类
    javascript高级程序设计第3版——第一章概括
    js 获取getElementsTagName()方法返回值的内容
    js 数组的pop(),push(),shift(),unshift()方法小结
    js parseInt()与Number()区别
    HTML中引用外部JS文件失效原因
    TP5报错 User qdm813229266 already has more than 'max_user_connections' active connections 解决办法
    微信内打开链接,跳转到公众号关注页面
  • 原文地址:https://www.cnblogs.com/zslzz/p/7355482.html
Copyright © 2011-2022 走看看