LeetCode 陣列和矩陣

Mondo 科技 更新 2024-01-31

給定陣列 a[0,1,..n-1],請構造乙個陣列 b[0,1,..n-1],其中元素 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];.))

想法: 假設:

left[i] = a[0]*.a[i-1]right[i] = a[i+1]*.a[n-1]
所以:

b[i] = left[i] *right[i]
可以知道:

left[i+1] = left[i] *a[i]right[i] = right[i+1] *a[i+1]
b[0] 沒有左,b[n-1] 沒有右。

import j**a.util.arrays;public class solution int temp = 1; for(int i = n-2; i >= 0; i--)return b; }
輸入乙個整數陣列,並實現乙個函式來調整陣列中數字的順序,使所有奇數都在陣列的前半部分,所有偶數都在陣列的後半部分,奇數和奇數、偶數和偶數之間的相對位置保持不變。

想法:你需要乙個輔助陣列來儲存資料。

public class solution int i = 0; for(int k = 0; k < n; k++)for(int k = 0; k < n; k++)
輸入乙個矩陣並按從外到內的順時針順序列印出每個數字,例如,如果您輸入如下矩陣:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 然後列印出數字 1、2、3、4、8、12、16、15、14、 13, 9, 5, 6, 7, 11, 10

想法:定義四個邊界。 注意:每次移動後應決定退出。

import j**a.util.arraylist;public class solution top++;if(top>down) break;向下移動 for(int i = top; i <= down; i++)right--;if(left>right) break;移動 for for (int i = right;.) i>= left; i--)down--;if(top>down) break;向上移動 for(int i = down; i>= top; i--)left++;if(left>right) break; }return result; }
283.給定乙個 num 陣列,編寫乙個函式,將所有零移動到陣列的末尾,同時保持非零元素的相對順序。

輸入:[0,1,0,3,12]輸出:[1,3,12,0,0]。
描述:

您必須在原始陣列上工作,不能複製其他陣列。 儘量減少操作次數。 想法:

將非 0 數字移到前面,然後將後面的數字更改為 0

class solution }for(int i = index; i < nums.length; i++)
566.在MATLAB中,有乙個非常有用的函式Reshape,它將矩陣重塑為不同大小的新矩陣,但保留其原始資料。

給出乙個由二維陣列表示的矩陣,以及兩個正整數 r 和 c,分別表示要重建的矩陣的行數和列數。

重構後的矩陣需要以相同的行遍歷順序填充原始矩陣的所有元素。

如果給定引數的整形操作可行且合理,則輸出新的整形矩陣;否則,輸出原始矩陣。

輸入:nums = [[1,2], 3,4]]r = 1, c = 4輸出:[1,2,3,4]] 解釋:nums 的行遍歷結果為 [1,2,3,4]。新矩陣是乙個 1 * 4 矩陣,新矩陣由以前的元素值逐個填充,乙個接乙個。
想法:

遍歷。

class solution return result; }
485.給定乙個二進位陣列,計算其中連續 1 的最大數量。

輸入:[1,1,0,1,1,1]輸出:3說明:前兩位和後三位是連續的1,所以連續1的最大個數為3
想法:

兩個變數用於儲存當前連續數,另乙個變數用於儲存最大連續數。

class solution else cur = 0; }return max; }
編寫乙個有效的演算法來搜尋 m x n 矩陣中的目標值。 該矩陣具有以下屬性:

每行中的元素按從左到右的公升序排列。

每列的元素按從上到下的公升序排列。

給定目標 = 5,則返回 true。 給定 target = 20,則返回 false。

思路:從[0][n-1]的位置開始,如果目標值大於這個值,則增加行數,如果目標值小於這個值,則減去列數。

class solution return false; }
378.給定乙個 n x n 矩陣,其中每個行和列元素按公升序排序,找到矩陣中第 k 個最小的元素。

請注意,它是排序後的第 k 個次要元素,而不是第 k 個不同的元素。

matrix = [ 1, 5, 9], 10, 11, 13], 12, 13, 15]], k = 8, 返回 13。
想法:

二進位搜尋。 通過計算數量來查詢。

找到使其成立的最左邊邊框。

class solution if(cnt >= k) h = mid; else l = mid + 1; }return l; }
645.集合 s 包含從 1 到 n 的整數。 遺憾的是,由於資料錯誤,集合中的乙個元素被複製到集合中另乙個元素的值,導致集合丟失乙個整數和乙個元素被複製。

給定乙個 nums 陣列,它表示集合 s 中錯誤的結果。 您的任務是首先找到重複出現的整數,然後找到丟失的整數並將它們作為陣列返回。

輸入:nums = [1,2,2,4]輸出:[2,3]。
想法:

排序,首先查詢重複項。

缺少的是比較前後兩個值之間的差值是否大於 1

有兩種特殊情況,首先失蹤,最後失蹤。

類解決方案查詢缺失值 if(nums[i] -nums[i-1] >1) } 以確定缺失值是否是最後乙個 if(nums[nums.com.length-1] != nums.length) return new int;
輸入:[1,3,4,2,2]輸出:2
描述:

您無法更改原始陣列(假設該陣列是唯讀的)。 只能使用額外的 o(1) 空間。 時間複雜度小於 o(n2)。 陣列中只有乙個重複的數字,但可以重複多次。 想法:

如果小於或等於 mid 的數字數大於 mid,則重複數在 [l,mid] 中,也可能是 mid。

在這裡,二分法搜尋基於統計量的數量,這類似於問題 5。

class solution if(cnt>m) h = m; else l = m+1; }return l; }
667.給定兩個整數 n 和 k,您需要實現乙個包含從 1 到 n 的 n 個不同整數的陣列,同時滿足以下條件:

如果此陣列為 [a1, a2, a3, .]。an],然後是陣列 [|a1 - a2|, a2 - a3|, a3 - a4|, an-1 - an|] 應該有並且只有 k 個不同的整數;

如果有多個答案,您可以簡單地實現並返回其中任何乙個。

輸入:n = 3, k = 1輸出:[1, 2, 3]解釋:[1, 2, 3] 包含 3 個不同的整數,範圍從 1 到 3,而 [1, 1] 有且只有 1 個不同的整數:1輸入:n = 3,k = 2輸出:[1, 3, 2]解釋:[1, 3, 2] 包含 1-3 範圍內的 3 個不同整數,而 [2, 1] 有且只有 2 個不同的整數: 1 和 2
想法:

讓前 k+1 個元素構造 k 個不同的差值,序列為:1、k+1、2、k、3、k-1、.,k/2, k/2+1.

class solution for(int i = k+1; i < n; i++)return result; }
697.給定乙個僅包含非負數的非空整數陣列,陣列的度數定義為指數組中任何元素的最大頻率。

您的任務是找到與 nums 大小相同的最短連續度陣列,並返回其長度。

輸入:[1,2,2,3,1,4,2]輸出:6
想法:使用三個哈希圖,乙個用於儲存每個值的出現次數,乙個用於儲存數字最左邊的坐標,乙個用於儲存數字的最右邊坐標。

class solution return true; }
565.陣列 a,長度為 n 從 0 開始,包含從 0 到 n - 1 的所有整數。 找到最大的集合 s 並返回其大小,其中 s[i] = 並遵循以下規則。

假設索引為 i a[i] 的元素是 s 的第乙個元素,s 的下乙個元素應該是 a[a[i]],然後是 a[a[a[a[i]]],依此類推,直到 s 出現重複元素。

輸入:a = [5,4,0,3,1,6,2]輸出:4 解釋:a[0] = 5,a[1] = 4,a[2] = 0,a[3] = 3,a[4] = 1,a[5] = 6,a[6] = 2最長的 s[k]:s[0] = =
想法:

由於每個生成的鏈都是迴圈的,因此會標記已訪問的元素,並且下次不會再次訪問該元素,以避免冗餘。

class solution max = math.max(max,cnt); return max; }
769.陣列 arr 為 [0, 1, ., .]。arr.length - 1],我們將這個陣列拆分為幾個“塊”,並分別對塊進行排序。然後進行聯接,使聯接的結果與按公升序排序的原始陣列相同。

我們可以將陣列劃分為多少個塊?

輸入:arr = [4,3,2,1,0]輸出:1解釋:將陣列分成 2 個或更多塊不會產生所需的結果。 例如,除以 [4, 3], 2, 1, 0] 得到 [3, 4, 0, 1, 2],它不是有序陣列。輸入:arr = [1,0,2,3,4]輸出:4解釋:我們可以將其分成兩部分,例如[1,0],2,3,4]。但是,拆分為 [1, 0], 2], 3], 4] 會給出最大塊數。
想法:

記錄可在其原始位置或自身位置排序的元素數。

class solution return result; }
4.給定兩個大小為 m 和 n 的正序(從最小到最大)陣列,nums1 和 nums2。

求這兩個正序陣列的中位數,並要求演算法的時間複雜度為 o(log(m + n))。

您可以假設 nums1 和 nums2 不會同時為 null。

思路:陣列分割槽。

將兩個陣列分成兩部分,前者的最小值小於後者的最小值,並且長度相等。

以找到中位數。

class solution int m = nums1.length; int n = nums2.length; int left = 0, right = m, ansi = -1;median1:前一部分的最大值 median2:後一部分的最小值 int median1 = 0, median2 = 0; while (left <= right) else }return (m + n) %2 == 0 ? median1 + median2) / 2.0 : median1; }
189.給定乙個陣列,將陣列 k 位置中的元素向右移動,其中 k 是非負數。

想法:當場翻轉。

class solution private void reverse(int nums, int start, int end) }
48.給定 n n 的二維矩陣表示影象。 將影象順時針旋轉 90 度。

您必須就地旋轉影象,這意味著您需要直接修改輸入的 2D 矩陣。 請不要使用其他矩陣來旋轉影象。

想法:類似於順時針列印影象。

從外向內旋轉每一層。

class solution }private void rotate2(int[matrix, int left, int right, int top, int down)
41.給定乙個未排序的整數陣列,找到其中未出現的最小正整數。

輸入:[3,4,-1,1]輸出:2輸入:[7,8,9,11,12]輸出:1
您的演算法的時間複雜度應為 o(n),並且僅在常數級別使用額外的空間。

思路:原位交換,並將值對應於陣列的相應基數。

class solution }for (int i = 0; i < n; i++)return n + 1; }

相關問題答案

    Leetcode 2009 使陣列具有最少的運算元

    給你乙個整數 nums 陣列。在每個操作中,您都可以將 nums 中的任何元素替換為任意整數。如果 Nums 滿足以下條件,則它是連續的 nums 中的所有元素彼此不同。nums 中最大元素和最小元素之間的差值等於 numslength 例如,nums ,,, 是連續的,但 nums ,,,, 不是...

    LeetCode 215 陣列中的第 k 個最大元素

    在未排序的陣列中找到第 k 個最大的元素。請注意,您正在尋找按陣列排序的第 k 個最大元素,而不是第 k 個不同的元素。示例 輸入 ,,,,, 和 k 輸出 示例 輸入 ,,,,,,,, 和 k 輸出 描述 您可以假設 k 始終有效,並且 k 陣列的長度是好的。快速選擇阿里騰訊位元組的問題要求在無序...

    Leetcode 1671 獲取山陣列的最小刪除次數

    當且僅當 arr 滿足以下條件時,我們將 arr 定義為山峰陣列 arr.length 有乙個下標 i 從 開始 滿足 i arr長度 和 arr arr i arr i arr arr.length 給定乙個整數陣列 nums,請返回將 nums 刪除到山形陣列中的最小次數。示例 輸入 nums ...

    LeetCode 32 個最長的有效括號

    僅給定乙個收容 跟 以查詢包含有效括號的最長子字串的長度。示例 輸入 輸出 解釋 最長的有效括號子字串是 示例 輸入 輸出 解釋 最長的有效括號子字串是 對阿里巴巴騰訊位元組進行動態程式設計的直觀方法是分別計算以 i 開頭的最長有效括號 i 從 到 n 並從中取最大的括號。支援 Python 類解決...

    判斷陣列的方法有哪些?

    關鍵字 js 方法判斷陣列。有幾種方法可以判斷值是否是 j ascript 中的陣列,但這裡有一些常見的方法 用array.isarray 方法可以確定值是否為陣列。這是 ES 中的乙個新方法,它返回乙個布林值。const arr ,, console.log array.isarray arr t...