日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题

發布時間:2023/12/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、二維數組中的查找
    • 題目
    • 題解一
    • 題解二
    • 題解三
  • 二、替換空格
    • 題目
    • 題解一
    • 題解二
    • 題解三


前言


本文主要是寫了我做算法題的思路以及對其他優秀題解的自我理解。


一、二維數組中的查找

題目

在一個 n * m 的二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個高效的函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。leetcode鏈接
示例:

現有矩陣 matrix 如下:

[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30] ]

給定 target = 5,返回 true。

給定 target = 20,返回 false。
限制:

0 <= n <= 1000
0 <= m <= 1000

題解一

看到此題中的條件:每一行從左到右都是遞增的,每一列從上到下也是遞增的,因此可以說每一行都是有序的。由此我想到了最近很熟悉的二分查找,所以寫出了以下的題解,通過對每一行進行二分查找,如果能找到就返回true,如果每一行都找不到那么就返回false。

public boolean findNumberIn2DArray1(int[][] matrix, int target) {//邊界條件判斷if (matrix == null || matrix.length == 0 ||matrix[0] == null || matrix[0].length == 0)return false;for (int i = 0;i < matrix.length ;i++){if (Arrays.binarySearch(matrix[i],target) >= 0){return true;}else{continue;}}return false;}

題解二

暴力查找法:我們之前也做過類似的在數組中查找target的題目,可以直接對數組進行暴力遍歷,找到就返回true,找不到返回false。
時間復雜度為O(n*m),空間復雜度為O(1).

public boolean findNumberIn2DArray(int[][] matrix, int target) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return false;}int rows = matrix.length, columns = matrix[0].length;for (int i = 0; i < rows; i++) {for (int j = 0; j < columns; j++) {if (matrix[i][j] == target) {return true;}}}return false;}

題解三

此題解出自這里
這個二維數組是有特點的:
每一行都是遞增的
每一列都是遞增的
首先,我們初始化一個指向矩陣右上角的元素 。
從這個元素開始查找,如果這個元素比 target 大,則說明需要找更小的,往左走;如果這個元素比 target 小,則說明應該找更大的,往下走。
此方法的時間復雜度為O(n+m)

public boolean Find(int target, int [][] array) {//邊界條件判斷if (array == null || array.length == 0 ||array[0] == null || array[0].length == 0)return false;//獲取函數矩陣的行數 m 與列數 nint m = array.length, n = array[0].length;//初始化一開始的元素位置,這里我們設置為矩陣最右上角的元素int i = 0, j = n - 1;//循環遍歷整個函數while (i < m && j >= 0) {//如果目標值小于右上角的數字,則列下標減一if (target < array[i][j]) j--;//如果目標值大于右上角的數字,則行下標加一else if (target > array[i][j]) i++;//如果相等,直接 trueelse return true;}//循環結束后如果還沒有找到目標時,返回 falsereturn false;}

二、替換空格

題目

請實現一個函數,把字符串 s 中的每個空格替換成"%20"。
示例 1:

輸入:s = "We are happy." 輸出:"We%20are%20happy."

限制:
0 <= s 的長度 <= 10000

題解一

根據題目的描述我第一反應是想到了java中String類的函數replaceAll,使用改方法只需要一行代碼直接通過。

public String replaceSpace(String s) {return s.replaceAll(" ","%20");}

但是如果面試的時候被問到這樣的題目面試官肯定希望你不止會使用java自帶的函數解決,還能不使用函數解決。

題解二

String是不可改變的,但是java中也有可變的字符串StringBuilder,初始化一個 StringBuilder 實例 sb,遍歷字符串 s 的每個字符,當遍歷到非空字符的時候,直接將字符 append 到 sb 中,如果遍歷到的是空字符,那么將 %20 append 到 sb 中,然后直接返回 sb.toString。

public String replaceSpace(String s) {StringBuilder sb = new StringBuilder();for (char c : s.toCharArray()) {if (c == ' ') sb.append("%20");else sb.append(c);}return sb.toString();}
時間復雜度是 O(n) 空間復雜度是 O(n)

題解三

使用自定義數組的方式,創建一定長度的數組,然后遍歷原字符串的每一個字符,遇到非空格就放入數組中,遇到空格就把%20依次放入數組中,最后將該數組以字符串返回。
這里有一個關鍵的問題是:自定義數組的長度該設置為多少呢?
方法一:原字符串長度的三倍(這樣會有一部分空間可能用不到)
方法二:在定義數組前,先遍歷原字符串計算出空格的數量,然后定義數組的長度為:原字符串長度+空格數*2

方法一: public String replaceSpace(String s) {int n = s.length();char[] newArr = new char[3 * n];int j = 0;for (int i = 0; i < n; i++) {char c = s.charAt(i);if (c == ' ') {newArr[j++] = '%';newArr[j++] = '2';newArr[j++] = '0';} else {newArr[j++] = c;}}return new String(newArr, 0, j);} 方法二 public String replaceSpace4(String s) {int n = s.length();int cnt = 0;for (char c : s.toCharArray()) {if (c == ' ') cnt++;}char[] newArr = new char[n + 2 * cnt];int j = 0;for (int i = 0; i < n; i++) {char c = s.charAt(i);if (c == ' ') {newArr[j++] = '%';newArr[j++] = '2';newArr[j++] = '0';} else {newArr[j++] = c;}}return new String(newArr);}

總結

以上是生活随笔為你收集整理的剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: mm1313亚洲国产精品美女 | 久久久成人精品 | 亚洲综合在线一区二区 | 中文字幕在线二区 | 99ri在线| 人妻无码久久精品人妻 | 日韩字幕 | 久久国产福利 | 免费日本在线 | av资源免费观看 | 男女啪啪无遮挡 | 91精品国产综合久久久密臀九色 | 奇米影视四色777 | 91高清视频| av中文天堂 | 国产欧美三区 | 久久久区 | 欧美一级在线播放 | 黄色精品网站 | 少妇被按摩师摸高潮了 | 美女校花脱精光 | 一区二区三区日 | 国产综合视频一区 | 麻豆www| 亚洲无卡视频 | 欧美vieox另类极品 | 国产香蕉视频 | 草草草在线视频 | av成人毛片| 屁股夹体温计调教play | 91亚洲成人| 亚洲免费精品视频在线观看 | 尤物视频在线观看国产性感 | 福利片第一页 | 亚洲精品www久久久久久广东 | 色狠狠一区二区三区香蕉 | 亚州男人的天堂 | 国产激情对白 | 人人射人人插 | 久久久久久久久久久97 | 成人国产片 | 国产三级伦理片 | 中文字幕在线免费观看视频 | 美女又爽又黄免费视频 | 娇妻被老王脔到高潮失禁视频 | 熟女少妇一区二区三区 | 亚洲精品久久久蜜桃网尤妮丝 | 久久久久免费观看 | 国产精品27p| 欧美激情成人网 | 射精一区二区 | 伊人精品在线 | 夜噜噜| 久国久产久精永久网页 | 一级黄色片看看 | 色婷婷av一区二区三区软件 | av资源共享 | 日韩精品视频在线免费观看 | 国产精品丝袜一区 | 97人妻人人揉人人躁人人 | 97精品人妻一区二区三区香蕉 | aise爱色av| 亚洲色图第1页 | 亚洲AV乱码国产精品观看麻豆 | 国内精品久久久久久久久 | 精品无码一区二区三区 | 国产全是老熟女太爽了 | 国产v在线观看 | 饥渴少妇勾引水电工av | 动漫同人高h啪啪爽文 | 亚洲一区二区三区 | 免费成人深夜夜 | 亚洲免费不卡视频 | 亚洲在线视频 | 国产伦精品一区二区三区四区视频 | 亚洲精品高清视频在线观看 | 国产免费99 | 中文字幕人妻一区二 | 法国空姐 在线 | 他揉捏她两乳不停呻吟动态图 | 丰满少妇被猛烈进入 | 91麻豆精品91久久久久同性 | 国产suv精品一区 | 欧美性猛交99久久久久99按摩 | 亚洲第一成肉网 | 污污视频网站在线免费观看 | 在线观看国产免费视频 | 国产亚洲欧美一区二区 | av一区二区三区在线 | 国产精品一区二区三区在线 | 日本免费精品视频 | 国产精品永久免费观看 | 三级国产视频 | 一区二区三区四区人妻 | 精品播放| 久久这里只有精品8 | 五月深爱婷婷 | 精品国产无码一区二区三区 | 久久女人天堂 |