牛客雜記——6.5

基礎知識

1、在JAVA中,假設A有構造方法A(int a) ,則在類A的其他構造方法中調用該構造方法和語句格式應該爲this(X)。
2、裝箱、拆箱操作發生在引用類型和值類型之間
基本數據類型轉化成包裝類是裝箱 (如: int --> Integer)。
包裝類轉化成基本數據類型就是拆箱 (如:Integer --> int)。
包裝類就是引用類型,基本數據類型就是值類型
裝箱——值類型轉換爲引用類型;拆箱——引用類型轉換爲值類型。
3、SimpleDateFormat是線程不安全的
4、ConcurrentHashMap不是使用synchronized關鍵字保證線程安全

在這裏插入圖片描述 5、HashMap實現了map接口
6、Array.asList方法返回對象是一個Arrays內部類,並沒有實現集合的修改方法。 Arrays.asList體現的是適配器模式,只是轉換接口,後臺的數據仍是數組。
7、關於泛型
1)虛擬機中沒有泛型。只有普通類和普通方法
2)所有泛型類的類型參數在編譯時都會被擦除
3)創建泛型對象時請指明類型,讓編譯器儘早的做參數檢查
4)泛型的類型擦除機制能在運行時動態獲取List中T的實際類型

編程

神奇的口袋

[編程題]23630-神奇的口袋
鏈接:https://www.nowcoder.com/questionTerminal/9aaea0b82623466a8b29a9f1a00b5d35
[神奇的口袋]有一個神奇的口袋,總的容積是40 ,用這個口袋可以變出一些物品,這些物品的總體積必須是40。John現在有n個想要得到的物品,每個物品的體積
分別是a1 , 2… John可以從這些物品中選擇-一些 ,如果選出的物體的總體積是40 ,那麼利用這個神奇的口袋, John就可以得到這些物品。現在的問題
是,John有多少種不同的選擇物品的方式。

在這裏插入圖片描述
【解題思路】:
採用遞歸思想:
①物品n個,物品體積逐一放入weight[]中
②遞歸函數count(int s,int n) : 其中s爲剩餘物品重量,n爲剩餘可選的物品個數
則分以下兩步遞歸求解:
a.從後往前裝,裝上weight[n]後,若剩餘物品仍然有解
則count(s-weight[n],n-1);
b.若裝了weight[n]後,無解,則刪除該包,嘗試第n-1個
count(s,n-1);

import java.util.*;
public class Main {
    static int[] weight;
    static int N;
    static int count=0;
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        while (input.hasNext()) {
            N = input.nextInt();
            weight = new int[N+1];
            for (int i = 1; i <= N; i++) {
                weight[i] = input.nextInt();
            }
            count(40,N);
            System.out.println(count);
        }
    }
    public static void count(int s,int n) {
    //如果正好裝滿
     if(s==0) {
        ++count;
        return ;
    }
      //是s<0或n<1則不能完成
        if(s<0||(s>0&&n<1))
            return ;
    count(s-weight[n],n-1);
    count(s,n-1);
}
}

用兩個棧實現隊列

[編程題]23281-用兩個棧實現隊列
鏈接https://www.nowcoder.com/questionTerminal/54275ddae22f475981afa2244dd448c6
在這裏插入圖片描述
【解題思路】:
棧1用來作入隊列
棧2用來出隊列,當棧2爲空時,棧1全部出棧到棧2,棧2再出棧(即出隊列)
【示例代碼】:


import java.util.Stack;

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    public void push(int node) {
        stack1.push(node);

    }
    public int pop() {
        while (!stack1.empty()){
            stack2.push(stack1.pop());
        }
        int temp = stack2.pop();
        while(!stack2.isEmpty()){
            stack1.push(stack2.pop());
        }
        return temp;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章