码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer51-55

时间:2020-06-05 14:55:19      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:efault   else   函数   from   oop   this   第一个   head   int   

51构建乘积数组

给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)

import java.util.ArrayList;
public class Solution {
    public int[] multiply(int[] A) {
        int[] B=new int[A.length];
        for(int i=0;i<A.length;i++){
            B[i]=1;
            for(int j=0;j<A.length;j++){
                if(j!=i){
                    B[i]*=A[j];
                }
            }
        }
        return B;
    }
}

52 表示数值的字符串

  请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

 

[-+]?

正负号后面的 ? 后缀表示这个负号是可选的,表示有0到1个负号或者正号

\\d*

\d的含义和[0-9]一样。它匹配一个数字。后缀 * 指引它可匹配零个或者多个数字。

(?:\\.\\d*)?

(?: …)?表示一个可选的非捕获型分组。* 指引这个分组会匹配后面跟随的0个或者多个数字的小数点。

(?:[eE][+\\-]?\d+)?

这是另外一个可选的非捕获型分组。它会匹配一个e(或E)、一个可选的正负号以及一个或多个数字。

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Solution {
    public boolean isNumeric(char[] str) {
         String s = new String(str);
        s = s.trim();
        String regex = "^[-+]?[0-9]+[.]?\\d*[eE][-+]?\\d+$|^[-+]?[0-9]+[.]?\\d*$|^[-+]?[.][0-9]+[eE]?[-+]?\\d+$|^[-+]?[.][0-9]+$";
                //"^[-+]?\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?$"

        Pattern pattern = Pattern.compile(regex);
        Matcher m = pattern.matcher(s);
        return m.matches();
    }
}

53字符流中第一个不重复的字符

请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。

import java.util.Map;
import java.util.LinkedHashMap;
public class Solution {
    //Insert one char from stringstream
    public void Insert(char ch)
    {
        stringBuilder.append(ch);
    }
    StringBuilder stringBuilder = new StringBuilder();
  //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        String str = stringBuilder.toString();
        Map<Character,Integer> map = new LinkedHashMap<>();
        for(int i = 0; i < str.length(); i++){
            int count = map.getOrDefault(str.charAt(i),0)+1;
            map.put(str.charAt(i),count);
        }
        for(Map.Entry<Character, Integer> entry: map.entrySet()) {
            if(entry.getValue() == 1){
                return entry.getKey();
            }
        }
        return #;
    }
}

54链表中环的入口节点

给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

import java.util.Map;
import java.util.HashMap;
public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead)
    {
        Map<ListNode,Integer> map = new HashMap<>();
        while(!map.containsKey(pHead)){
            if(pHead.next == null){
                return null;
            }
            map.put(pHead,1);
            pHead = pHead.next;
        }
              return pHead;
    }
}

55删除链表中重复的节点

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
时间复杂度:O(n)
空间复杂度:O(1)
public class Solution {
    public ListNode deleteDuplication(ListNode pHead)
    {
        ListNode head = new ListNode(-1);
        head.next = pHead;
        ListNode cur =pHead;
        ListNode pre = head;
        while(cur != null){
            if(cur.next != null && cur.val == cur.next.val){
                while(cur.next != null && cur.val == cur.next.val){
                    cur = cur.next;
                }
                cur = cur.next;
                pre.next = cur;
            }else{
               pre = cur;
               cur = cur.next;
            }
        }
        return head.next;
       
    }
}

 

剑指offer51-55

标签:efault   else   函数   from   oop   this   第一个   head   int   

原文地址:https://www.cnblogs.com/lgh544/p/13049280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!