欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

云智手撕算法

1. leetcode 3 最長無重復字串

public int lengthOfLongestSubstring(String s) {
       int i=0,j=0;
       Set<Character> set=new HashSet<>();
       int maxLen=0;
       while (j<s.length()){
           char  c=s.charAt(j);
           while (set.contains(c)){
               set.remove(s.charAt(i));
               i++;
           }
           maxLen=Math.max(maxLen,j-i+1);  //更新每次的最大長度
           j++;
           set.add(c);
       }
       return maxLen;
    }

雖然是雙層 while 循環(huán),使用了滑動窗口的思想,算法時間復雜度還是 ON 的。

2. 二叉樹廣度和廣度遍歷方式

自己定義了一個 TreeNode,構建出來二叉樹,然后進行遍歷。

深度優(yōu)先使用遞歸方式遍歷,廣度優(yōu)先使用隊列來遍歷。

public class TreeNode {

    public Integer value;
    public TreeNode left;
    public TreeNode right;

    public TreeNode(Integer value, TreeNode left, TreeNode right) {
        this.value = value;
        this.left = left;
        this.right = right;
    }

    public TreeNode() {
    }
    public TreeNode(Integer value) {
        this.value=value;
        this.left=null;
        this.right=null;
    }
}

深度優(yōu)先遍歷方式:

    public  static  void  printDFS(TreeNode root){
         if (root==null){
             return;
         }
        //前序遍歷方式
        System.out.println(root.value);
        printDFS(root.left);
        printDFS(root.right);
    }

廣度優(yōu)先遍歷:

public  static  void  printBFS(TreeNode root){
Queue<TreeNode> queue=new ArrayDeque<>();
queue.add(root);
while (!queue.isEmpty()){
    TreeNode node=queue.poll();
    System.out.println(node.value);
    if (node.left!=null){
        queue.add(node.left);
    }
    if (node.right!=null){
        queue.add(node.right);
    }
}
}

手寫快速排序

先和面試官說快排的思想

采用“分治”的思想,對于一組數(shù)據(jù),選擇一個基準元素(base),通常選擇第一個或最后一個元素,通過第一輪掃描,比base小的元素都在base左邊,比base大的元素都在base右邊,再有同樣的方法遞歸排序這兩部分,直到序列中所有數(shù)據(jù)均有序為止。

   public static void quickSort(int[] arr, int start, int end) {
        //基準值是temp
        if (start < end) {
            int base = arr[start];
            int left = start;
            int right = end;
            while (left < right && arr[right] > base) {
                //后面的小于了temp
                right--;
            }
            arr[left] = arr[right];
            //右邊基準
            while (left < right && arr[left] < base) {
                left++;
            }
            arr[right] = arr[left];
            arr[left] = base;
            quickSort(arr, start, left - 1);
            quickSort(arr, left + 1, end);
        }
    }

沒寫出來,爆戰(zhàn)了,很難受。

優(yōu)化之后的代碼:

通過三數(shù)字取中減少時間的復雜度。

public static void quickSort(int[] arr, int start, int end) {
    if (start >= end) return;

    // 三數(shù)取中法選擇基準
    int mid = start + (end - start) / 2;
    if (arr[start] > arr[end]) swap(arr, start, end);
    if (arr[mid] > arr[end]) swap(arr, mid, end);
    if (arr[start] < arr[mid]) swap(arr, start, mid);

    int base = arr[start];
    int i = start, j = end;
    while (i < j) {
        while (i < j && arr[j] >= base) j--;
        if (i < j) arr[i++] = arr[j];
        while (i < j && arr[i] <= base) i++;
        if (i < j) arr[j--] = arr[i];
    }
    arr[i] = base;
    quickSort(arr, start, i - 1);
    quickSort(arr, i + 1, end);
}

private static void swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

可以參考這個博客

https://blog.csdn.net/qq_39181839/article/details/109478094

#手撕題#
牛牛的算法專欄 文章被收錄于專欄

牛牛的算法專欄,記錄一些算法題

全部評論
二面?
點贊 回復 分享
發(fā)布于 04-09 12:59 陜西

相關推薦

評論
3
14
分享

創(chuàng)作者周榜

更多
??途W(wǎng)
牛客企業(yè)服務