剑指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).
題解三
此題解出自這里
這個二維數組是有特點的:
每一行都是遞增的
每一列都是遞增的
首先,我們初始化一個指向矩陣右上角的元素 。
從這個元素開始查找,如果這個元素比 target 大,則說明需要找更小的,往左走;如果這個元素比 target 小,則說明應該找更大的,往下走。
此方法的時間復雜度為O(n+m)
二、替換空格
題目
請實現一個函數,把字符串 s 中的每個空格替換成"%20"。
示例 1:
限制:
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
總結
以上是生活随笔為你收集整理的剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者荣耀如何刷点卷
- 下一篇: 华擎推出 AMD A620 系列 AM5