zoukankan      html  css  js  c++  java
  • leetcode_前期心得

    字符串之间的比较,用equals,不能直接用==,否则会因为地址的不同而被认为两个内容一样的字符串是不一样的。

    binary research:

    public class Solution extends VersionControl {

        public int firstBadVersion(int n) {

            int low=1;

            int high=n,medium;

            if(isBadVersion(1)){

                return 1;

            }

            else{

                    while(low+1!=high)

                    {

                        medium=low+(high-low)/2;//这个比使用除法来的快

                        if(isBadVersion(medium)){

                            high=medium;

                        }

                        else{

                            low=medium;

                        }

                    }

                    if(high>n||(!isBadVersion(high)))//这个判断方式让速度更快

                        return -1;

                    return high;

                }

        }

    }

    二分查询优化:http://www.doc88.com/p-6961125561904.html

    寻找只含有2,3,5三个质因子的正整数(称之为ugly number)。

    质数:一个大于1的自然数,除了1与其自身外,不能被其他整数整除,称为质数

    (也称素数)。否则称为合数。

    质因子:一个因子,同时这个因子是质数。

    8: 是ugly number,8的因子:1,2,4,8。

    4与8都不是质数,不是质因子。2是质因子。最小质数为2,所以1也不是质因子。

    public class Solution {

        public boolean isUgly(int num) {

            if (num==0)

                return false;

            else {

                while(num!=1)

                {

                    if(num%2==0)

                    num/=2;

                    else if(num%3==0)

                    num/=3;

                    else if(num%5==0)

                    num/=5;

                    else break;

                }

                if(num==1)

                    return true;

                else return false;

            }

        }

    }

    对于stringbuffer的如下函数:

    setCharAt(int index, char ch)
              The character at the specified index is set to ch.

    表示将stringbuffer中的特定索引处的值设置为ch。前提是调用该函数的stringbuffer在当前索引处本身就有一个值。否则报错!

    public static void main(String[] args) {

          // TODO Auto-generated method stub

          ListNode listNode=new ListNode(0);

          ListNode result=listNode;

             for(int i=1;i<4;i++){

             System.out.println("进入循环");

             result =new ListNode(i);

             System.out.println("创建"+i+"新节点完毕");

             result=result.next;

          }

          while(listNode!=null){

             System.out.println(listNode.val);

             listNode=listNode.next;

          }

         

       }

    public class ListNode {

       int val;

       ListNode next;

       ListNode(int x) { val = x; }

    }

    //上述代码运行后,发现打印结果是0.

    初始将listNode赋值给result,之后result不断改变,最后从result头结点处遍历节点链表。然而由于在循环体内部result被重新创建,导致result不再是与listNode一样的值,所以打印结果只有listNode本身的0值。

    所以:循环体内应该改成:result.next= new ListNode(i);

    ********************************

    result.next=new ListNode(i);

    System.out.println("创建"+i+"新节点完毕");

    result=result.next;

    ***********************************

    有人认为发生了两次next。第一行的next仅仅是赋值作用,result并没有真正的到了next的位置,在第二次才将指针做了后移操作。

     

    我的代码:

    *************************************************************

    public class Solution {

        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {

                ListNode result=null;

                   if(l1==null){

                       return l2;

                   }

                   if(l2==null){

                       return l1;

                   }//对于两者有空的情况讨论

                   if(l1.val<=l2.val){

                       result=l1;//给result赋值,确定哪个是头结点

                       l1=l1.next;

                   }else{

                        result=l2;

                        l2=l2.next;

                   }           

                   ListNode result1=result;//指向头结点

                   while(l1!=null&&l2!=null){

                       if(l1.val<l2.val){

                           //把l1的值放到result中

                           result1.next=l1;

                           result1=result1.next;//这句是把指针移到刚刚更改过的那                                                                    个位置

                           //把l1的值往后放

                           l1=l1.next;

                       }else{

                           result1.next=l2;

                              result1=result1.next;

                              l2=l2.next;

                       }              

                   }

                   //判断是哪个先成为空

                   if(l1==null){

                       result1=l2;

                   }

                   result1=l1;

                   return result;

        }

    }

    **************************************************

    if(l1==null){

           result1=l2;

           }

    result1=l1;

    这段出了问题:改成如下:

    ********************************

    if(l1==null){

           result1.next=l2;

           }

    if(l2==null){

           result1.next=l1;

           }

    ************************************

    或者:

    result1.next=l1==null?l2:l1;
  • 相关阅读:
    2017-10-11seowhy记录
    2017.8.23创业项目方向
    西安项目分析
    创业方法
    做seowhy官网需要三个人
    2017.8.2 高级长尾编辑技巧
    Golang 任务队列策略 -- 读《JOB QUEUES IN GO》
    Go 到底有没有引用传参(对比 C++ )
    使用xorm工具,根据数据库自动生成 go 代码
    golang的Channel
  • 原文地址:https://www.cnblogs.com/litian0605/p/5168196.html
Copyright © 2011-2022 走看看