【Java】基礎算法練習題

在這里插入圖片描述

個人簡介:Java領域新星創作者;阿里云技術博主、星級博主、專家博主;正在Java學習的路上摸爬滾打,記錄學習的過程~
個人主頁:.29.的博客
學習社區:進去逛一逛~

在這里插入圖片描述

目錄

  • 基礎算法練習題
    • 🚀1. 兩數之和
    • 🚀13. 羅馬數字轉整數
    • 🚀26. 刪除有序數組中的重復項
    • 🚀2022. 將一維數組轉變成二維數組
    • 🚀LCR 158. 庫存管理 II
    • 🚀88. 合并兩個有序數組
    • 🚀704. 二分查找
    • 🚀69. x 的平方根
    • 🚀118. 楊輝三角
    • 🚀125. 驗證回文串
    • 🚀344. 反轉字符串
    • 🚀191. 位1的個數
    • 🚀326. 3 的冪
    • 🚀204. 計數質數
    • 🚀2427. 公因子的數目
    • 🚀1979. 找出數組的最大公約數
    • 🚀1984. 學生分數的最小差值


基礎算法練習題



🚀1. 兩數之和

?點擊跳轉:1. 兩數之和

給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target 的那 兩個 整數,并返回它們的數組下標。

你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素在答案里不能重復出現。

你可以按任意順序返回答案。

示例 1:

輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

輸入:nums = [3,2,4], target = 6
輸出:[1,2]

示例 3:

輸入:nums = [3,3], target = 6
輸出:[0,1]

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只會存在一個有效答案


通過哈希表實現比較,操作哈希表的開銷接近O(1)

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map = new HashMap<>();for(int i = 0;i < nums.length; ++i){map.put(nums[i], i);}for(int i = 0;i < nums.length; ++i){int key = target - nums[i];if(map.containsKey(key) && map.get(key) != i){return new int[]{i, map.get(key)};}}return null;}
}



🚀13. 羅馬數字轉整數

?點擊跳轉:13. 羅馬數字轉整數

羅馬數字包含以下七種字符: IVXLCDM

字符          數值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 羅馬數字 2 寫做 II ,即為兩個并列的 1 。12 寫做 XII ,即為 X + II27 寫做 XXVII, 即為 XX + V + II

通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等于大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為 IX。這個特殊的規則只適用于以下六種情況:

  • I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
  • C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。

給定一個羅馬數字,將其轉換成整數。

示例 1:

輸入: s = "III"
輸出: 3

示例 2:

輸入: s = "IV"
輸出: 4

示例 3:

輸入: s = "IX"
輸出: 9

示例 4:

輸入: s = "LVIII"
輸出: 58
解釋: L = 50, V= 5, III = 3.

示例 5:

輸入: s = "MCMXCIV"
輸出: 1994
解釋: M = 1000, CM = 900, XC = 90, IV = 4.

提示:

  • 1 <= s.length <= 15
  • s 僅含字符 ('I', 'V', 'X', 'L', 'C', 'D', 'M')
  • 題目數據保證 s 是一個有效的羅馬數字,且表示整數在范圍 [1, 3999]
  • 題目所給測試用例皆符合羅馬數字書寫規則,不會出現跨位等情況。
  • IL 和 IM 這樣的例子并不符合題目要求,49 應該寫作 XLIX,999 應該寫作 CMXCIX 。



自己想的,菜

class Solution {public int romanToInt(String s) {Map<Character, Integer> cMap = new HashMap<>();Map<String, Integer> sMap = new HashMap<>();int ans = 0;cMap.put('I', 1);cMap.put('V', 5);cMap.put('X', 10);cMap.put('L', 50);cMap.put('C', 100);cMap.put('D', 500);cMap.put('M', 1000);sMap.put("IV", 4);sMap.put("IX", 9);sMap.put("XL", 40);sMap.put("XC", 90);sMap.put("CD", 400);sMap.put("CM", 900);char[] arr = s.toCharArray();for(int i = 0;i < arr.length; ++i){if(i + 1 != arr.length && sMap.containsKey("" + arr[i] + arr[i + 1])){ans += sMap.get("" + arr[i] + arr[i + 1]);++i;}else{ans += cMap.get(arr[i]);}}return ans;}
}



優質解答

class Solution {public int romanToInt(String s) {int ans = 0;int preNum = getNum(s.charAt(0));for(int i = 1;i < s.length(); ++i){int num = getNum(s.charAt(i));if(preNum < num){ans -= preNum;}else{ans += preNum;}preNum = num;}return ans + preNum;}public int getNum(char c){switch(c){case 'I': return 1;case 'V': return 5;case 'X': return 10;case 'L': return 50;case 'C': return 100;case 'D': return 500;case 'M': return 1000;default: return 0;}}
}



🚀26. 刪除有序數組中的重復項

?點擊跳轉:26. 刪除有序數組中的重復項

給你一個 非嚴格遞增排列 的數組 nums ,請你** 原地** 刪除重復出現的元素,使每個元素 只出現一次 ,返回刪除后數組的新長度。元素的 相對順序 應該保持 一致 。然后返回 nums 中唯一元素的個數。

考慮 nums 的唯一元素的數量為 k ,你需要做以下事情確保你的題解可以被通過:

  • 更改數組 nums ,使 nums 的前 k 個元素包含唯一元素,并按照它們最初在 nums 中出現的順序排列。nums 的其余元素與 nums 的大小不重要。
  • 返回 k

判題標準:

系統會用下面的代碼來測試你的題解:

int[] nums = [...]; // 輸入數組
int[] expectedNums = [...]; // 長度正確的期望答案int k = removeDuplicates(nums); // 調用assert k == expectedNums.length;
for (int i = 0; i < k; i++) {assert nums[i] == expectedNums[i];
}

如果所有斷言都通過,那么您的題解將被 通過

示例 1:

輸入:nums = [1,1,2]
輸出:2, nums = [1,2,_]
解釋:函數應該返回新的長度 2 ,并且原數組 nums 的前兩個元素被修改為 1, 2 。不需要考慮數組中超出新長度后面的元素。

示例 2:

輸入:nums = [0,0,1,1,1,2,2,3,3,4]
輸出:5, nums = [0,1,2,3,4]
解釋:函數應該返回新的長度 5 , 并且原數組 nums 的前五個元素被修改為 0, 1, 2, 3, 4 。不需要考慮數組中超出新長度后面的元素。

提示:

  • 1 <= nums.length <= 3 * 104
  • -104 <= nums[i] <= 104
  • nums 已按 非嚴格遞增 排列



哈希表

class Solution {public int removeDuplicates(int[] nums) {Map<Integer, Integer> map = new HashMap<>();int index = 0;for(int num : nums){if(!map.containsKey(num)){map.put(num, index++);}}for(Map.Entry<Integer,Integer> entry : map.entrySet()){nums[entry.getValue()] = entry.getKey();}return map.size();}
}

雙指針

class Solution {public int removeDuplicates(int[] nums) {int p = 0;int q = 1;while(q < nums.length){if(nums[q] != nums[p]){if(q - p >= 1){nums[p + 1] = nums[q];++p;}}++q;}return p + 1;}
}



🚀2022. 將一維數組轉變成二維數組

?點擊跳轉:2022. 將一維數組轉變成二維數組

給你一個下標從 0 開始的一維整數數組 original 和兩個整數 mn 。你需要使用 original所有 元素創建一個 mn 列的二維數組。

original 中下標從 0n - 1 (都 包含 )的元素構成二維數組的第一行,下標從 n2 * n - 1 (都 包含 )的元素構成二維數組的第二行,依此類推。

請你根據上述過程返回一個 m x n 的二維數組。如果無法構成這樣的二維數組,請你返回一個空的二維數組。

示例 1:

img

輸入:original = [1,2,3,4], m = 2, n = 2
輸出:[[1,2],[3,4]]
解釋:
構造出的二維數組應該包含 2 行 2 列。
original 中第一個 n=2 的部分為 [1,2] ,構成二維數組的第一行。
original 中第二個 n=2 的部分為 [3,4] ,構成二維數組的第二行。

示例 2:

輸入:original = [1,2,3], m = 1, n = 3
輸出:[[1,2,3]]
解釋:
構造出的二維數組應該包含 1 行 3 列。
將 original 中所有三個元素放入第一行中,構成要求的二維數組。

示例 3:

輸入:original = [1,2], m = 1, n = 1
輸出:[]
解釋:
original 中有 2 個元素。
無法將 2 個元素放入到一個 1x1 的二維數組中,所以返回一個空的二維數組。

示例 4:

輸入:original = [3], m = 1, n = 2
輸出:[]
解釋:
original 中只有 1 個元素。
無法將 1 個元素放滿一個 1x2 的二維數組,所以返回一個空的二維數組。

提示:

  • 1 <= original.length <= 5 * 104
  • 1 <= original[i] <= 105
  • 1 <= m, n <= 4 * 104



解答

class Solution {public int[][] construct2DArray(int[] original, int m, int n) {int[][] ans = new int[][]{};int length = original.length;if(length != m * n) return ans;int index = 0;ans = new int[m][n];for(int i = 0;i < m; ++i){for(int j = 0;j < n; ++j){ans[i][j] = original[index++];}}return ans;}
}


🚀LCR 158. 庫存管理 II

?點擊跳轉:LCR 158. 庫存管理 II

倉庫管理員以數組 stock 形式記錄商品庫存表。stock[i] 表示商品 id,可能存在重復。請返回庫存表中數量大于 stock.length / 2 的商品 id

示例 1:

輸入: stock = [6, 1, 3, 1, 1, 1]
輸出: 1

限制:

  • 1 <= stock.length <= 50000
  • 給定數組為非空數組,且存在結果數字



哈希表

class Solution {public int inventoryManagement(int[] stock) {Map<Integer, Integer> map = new HashMap<>();int ans = -1;for(int num : stock){if(!map.containsKey(num)){map.put(num, 1);}else{map.put(num, map.get(num) + 1);}}for(Map.Entry<Integer, Integer> entry : map.entrySet()){int key = entry.getKey();int value = entry.getValue();if(value > stock.length / 2){ans = key;}}return ans;}
}

排序求眾數

class Solution {public int inventoryManagement(int[] stock) {Arrays.sort(stock);return stock[stock.length / 2];}
}



🚀88. 合并兩個有序數組

?點擊跳轉:88. 合并兩個有序數組

給你兩個按 非遞減順序 排列的整數數組 nums1nums2,另有兩個整數 mn ,分別表示 nums1nums2 中的元素數目。

請你 合并 nums2nums1 中,使合并后的數組同樣按 非遞減順序 排列。

**注意:**最終,合并后數組不應由函數返回,而是存儲在數組 nums1 中。為了應對這種情況,nums1 的初始長度為 m + n,其中前 m 個元素表示應合并的元素,后 n 個元素為 0 ,應忽略。nums2 的長度為 n

示例 1:

輸入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
輸出:[1,2,2,3,5,6]
解釋:需要合并 [1,2,3] 和 [2,5,6] 。
合并結果是 [1,2,2,3,5,6] ,其中斜體加粗標注的為 nums1 中的元素。

示例 2:

輸入:nums1 = [1], m = 1, nums2 = [], n = 0
輸出:[1]
解釋:需要合并 [1] 和 [] 。
合并結果是 [1] 。

示例 3:

輸入:nums1 = [0], m = 0, nums2 = [1], n = 1
輸出:[1]
解釋:需要合并的數組是 [] 和 [1] 。
合并結果是 [1] 。
注意,因為 m = 0 ,所以 nums1 中沒有元素。nums1 中僅存的 0 僅僅是為了確保合并結果可以順利存放到 nums1 中。

提示:

  • nums1.length == m + n
  • nums2.length == n
  • 0 <= m, n <= 200
  • 1 <= m + n <= 200
  • -109 <= nums1[i], nums2[j] <= 109



解答

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int help[] = new int[m + n];int p1 = 0;int p2 = 0;int i = 0;while(p1 < m && p2 < n){help[i++] = nums1[p1] <= nums2[p2] ? nums1[p1++] : nums2[p2++];}while(p1 < m) help[i++] = nums1[p1++];while(p2 < n) help[i++] = nums2[p2++];for(i = 0;i < help.length; ++i){nums1[i] = help[i];}}
}



🚀704. 二分查找

?點擊跳轉:704. 二分查找

給定一個 n 個元素有序的(升序)整型數組 nums 和一個目標值 target ,寫一個函數搜索 nums 中的 target,如果目標值存在返回下標,否則返回 -1

示例 1:

輸入: nums = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 出現在 nums 中并且下標為 4

示例 2:

輸入: nums = [-1,0,3,5,9,12], target = 2
輸出: -1
解釋: 2 不存在 nums 中因此返回 -1

提示:

  1. 你可以假設 nums 中的所有元素是不重復的。
  2. n 將在 [1, 10000]之間。
  3. nums 的每個元素都將在 [-9999, 9999]之間。



二分查找

class Solution {public int search(int[] nums, int target) {int L = 0;int R = nums.length - 1;int ans = -1;while(L <= R){int mid = (L+R)/2;if(nums[mid] == target){ans = mid;break;}else if(nums[mid] < target){L = mid + 1;}else if(nums[mid] > target){R = mid - 1;}}return ans;}
}



🚀69. x 的平方根

?點擊跳轉:69. x 的平方根

給你一個非負整數 x ,計算并返回 x算術平方根

由于返回類型是整數,結果只保留 整數部分 ,小數部分將被 舍去 。

**注意:**不允許使用任何內置指數函數和算符,例如 pow(x, 0.5) 或者 x ** 0.5

示例 1:

輸入:x = 4
輸出:2

示例 2:

輸入:x = 8
輸出:2
解釋:8 的算術平方根是 2.82842..., 由于返回類型是整數,小數部分將被舍去。

提示:

  • 0 <= x <= 231 - 1



暴力

class Solution {public int mySqrt(int x) {for(long i=0;;i++){if(i*i>x){return (int)i-1;}}}
}

二分

class Solution {public int mySqrt(int x) {int l = 0;int r = x;int ans = 0;while(l <= r){int mid = l + ((r - l) >> 1);if((long) mid * mid <= x){ans = mid;l = mid + 1;}else{r = mid - 1;}}return ans;}
}



🚀118. 楊輝三角

?點擊跳轉:118. 楊輝三角

給定一個非負整數 *numRows,*生成「楊輝三角」的前 numRows 行。

在「楊輝三角」中,每個數是它左上方和右上方的數的和。

img

示例 1:

輸入: numRows = 5
輸出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

示例 2:

輸入: numRows = 1
輸出: [[1]]

提示:

  • 1 <= numRows <= 30



題解

class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> ans = new ArrayList<>();for(int i = 0;i < numRows; ++i){List<Integer> list = new ArrayList<>();for(int j = 0;j <= i; ++j){if(j == 0 || j == i){list.add(1);}else{list.add(ans.get(i - 1).get(j) + ans.get(i - 1).get(j - 1));}}ans.add(list);}return ans;}
}



🚀125. 驗證回文串

?點擊跳轉:125. 驗證回文串

如果在將所有大寫字符轉換為小寫字符、并移除所有非字母數字字符之后,短語正著讀和反著讀都一樣。則可以認為該短語是一個 回文串

字母和數字都屬于字母數字字符。

給你一個字符串 s,如果它是 回文串 ,返回 true ;否則,返回 false

示例 1:

輸入: s = "A man, a plan, a canal: Panama"
輸出:true
解釋:"amanaplanacanalpanama" 是回文串。

示例 2:

輸入:s = "race a car"
輸出:false
解釋:"raceacar" 不是回文串。

示例 3:

輸入:s = " "
輸出:true
解釋:在移除非字母數字字符之后,s 是一個空字符串 "" 。
由于空字符串正著反著讀都一樣,所以是回文串。

提示:

  • 1 <= s.length <= 2 * 105
  • s 僅由可打印的 ASCII 字符組成



使用StringBuilder API

class Solution {public boolean isPalindrome(String s) {StringBuilder sb = new StringBuilder();for(int i = 0;i < s.length(); ++i){char c = s.charAt(i);if(Character.isLetterOrDigit(c)){sb.append(Character.toLowerCase(c));}}StringBuilder sb_r = new StringBuilder(sb).reverse();return sb.toString().equals(sb_r.toString());}
}



🚀344. 反轉字符串

?點擊跳轉:344. 反轉字符串

編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 s 的形式給出。

不要給另外的數組分配額外的空間,你必須**原地修改輸入數組**、使用 O(1) 的額外空間解決這一問題。

示例 1:

輸入:s = ["h","e","l","l","o"]
輸出:["o","l","l","e","h"]

示例 2:

輸入:s = ["H","a","n","n","a","h"]
輸出:["h","a","n","n","a","H"]

提示:

  • 1 <= s.length <= 105
  • s[i] 都是 ASCII 碼表中的可打印字符



雙指針

class Solution {public void reverseString(char[] s) {if(s.length < 2) return;for(int i = 0;i < s.length / 2; ++i){swap(s, i, s.length - 1 - i);}}public void swap(char[] arr, int a, int b){char temp = arr[a];arr[a] = arr[b];arr[b] = temp;}
}



🚀191. 位1的個數

?點擊跳轉:191. 位1的個數

編寫一個函數,輸入是一個無符號整數(以二進制串的形式),返回其二進制表達式中數字位數為 ‘1’ 的個數(也被稱為漢明重量)。

提示:

  • 請注意,在某些語言(如 Java)中,沒有無符號整數類型。在這種情況下,輸入和輸出都將被指定為有符號整數類型,并且不應影響您的實現,因為無論整數是有符號的還是無符號的,其內部的二進制表示形式都是相同的。
  • 在 Java 中,編譯器使用二進制補碼記法來表示有符號整數。因此,在 示例 3 中,輸入表示有符號整數 -3

示例 1:

輸入:n = 00000000000000000000000000001011
輸出:3
解釋:輸入的二進制串 00000000000000000000000000001011 中,共有三位為 '1'。

示例 2:

輸入:n = 00000000000000000000000010000000
輸出:1
解釋:輸入的二進制串 00000000000000000000000010000000 中,共有一位為 '1'。

示例 3:

輸入:n = 11111111111111111111111111111101
輸出:31
解釋:輸入的二進制串 11111111111111111111111111111101 中,共有 31 位為 '1'。

提示:

  • 輸入必須是長度為 32二進制串



位運算

public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n) {int ans = 0;for(int i = 0;i < 32; ++i){if((n & 1) == 1) ans++;n >>>= 1;}return ans;}
}



🚀326. 3 的冪

?點擊跳轉:326. 3 的冪

給定一個整數,寫一個函數來判斷它是否是 3 的冪次方。如果是,返回 true ;否則,返回 false

整數 n 是 3 的冪次方需滿足:存在整數 x 使得 n == 3x

示例 1:

輸入:n = 27
輸出:true

示例 2:

輸入:n = 0
輸出:false

示例 3:

輸入:n = 9
輸出:true

示例 4:

輸入:n = 45
輸出:false

提示:

  • -231 <= n <= 231 - 1



解答

class Solution {public boolean isPowerOfThree(int n) {if(n == 1) return true;if(n == 0) return false;while(true){if(n % 3 == 0){n /= 3;if(n == 1) return true;}else{return false;}}}
}



🚀204. 計數質數

?點擊跳轉:204. 計數質數

給定整數 n ,返回 所有小于非負整數 n 的質數的數量

示例 1:

輸入:n = 10
輸出:4
解釋:小于 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。

示例 2:

輸入:n = 0
輸出:0

示例 3:

輸入:n = 1
輸出:0

提示:

  • 0 <= n <= 5 * 106



埃氏篩

class Solution {public int countPrimes(int n) {boolean[] flag = new boolean[n];Arrays.fill(flag, true);for(int i = 2;i*i < n; ++i){if(flag[i]){for(int j = i * i;j < n; j += i){flag[j] = false;}}}int ans = 0;for(int i = 2;i < n; ++i){if(flag[i]) ++ans;}return ans;}
}



🚀2427. 公因子的數目

?點擊跳轉:2427. 公因子的數目

給你兩個正整數 ab ,返回 ab 因子的數目。

如果 x 可以同時整除 ab ,則認為 xab 的一個 公因子

示例 1:

輸入:a = 12, b = 6
輸出:4
解釋:12 和 6 的公因子是 1、2、3、6 。

示例 2:

輸入:a = 25, b = 30
輸出:2
解釋:25 和 30 的公因子是 1、5 。

提示:

  • 1 <= a, b <= 1000



暴力

class Solution {public int commonFactors(int a, int b) {int min = a > b ? b: a;int ans = 0;for(int i = 1;i <= min; ++i){if(a % i == 0 && b % i == 0) ans++;}return ans;}
}



🚀1979. 找出數組的最大公約數

?點擊跳轉:1979. 找出數組的最大公約數

給你一個整數數組 nums ,返回數組中最大數和最小數的 最大公約數

兩個數的 最大公約數 是能夠被兩個數整除的最大正整數。

示例 1:

輸入:nums = [2,5,6,9,10]
輸出:2
解釋:
nums 中最小的數是 2
nums 中最大的數是 10
2 和 10 的最大公約數是 2

示例 2:

輸入:nums = [7,5,6,8,3]
輸出:1
解釋:
nums 中最小的數是 3
nums 中最大的數是 8
3 和 8 的最大公約數是 1

示例 3:

輸入:nums = [3,3]
輸出:3
解釋:
nums 中最小的數是 3
nums 中最大的數是 3
3 和 3 的最大公約數是 3

提示:

  • 2 <= nums.length <= 1000
  • 1 <= nums[i] <= 1000



一次遍歷 + 輾轉相除

class Solution {public int findGCD(int[] nums) {int min = Integer.MAX_VALUE;int max = Integer.MIN_VALUE;for(int i = 0;i < nums.length; ++i){if(nums[i] < min) min = nums[i];if(nums[i] > max) max = nums[i];}return GCD(max, min);}//輾轉相除法public int GCD(int a, int b){return b == 0 ? a : GCD(b, a%b);}
}



🚀1984. 學生分數的最小差值

?點擊跳轉:1984. 學生分數的最小差值

給你一個 下標從 0 開始 的整數數組 nums ,其中 nums[i] 表示第 i 名學生的分數。另給你一個整數 k

從數組中選出任意 k 名學生的分數,使這 k 個分數間 最高分最低分差值 達到 最小化

返回可能的 最小差值

示例 1:

輸入:nums = [90], k = 1
輸出:0
解釋:選出 1 名學生的分數,僅有 1 種方法:
- [90] 最高分和最低分之間的差值是 90 - 90 = 0
可能的最小差值是 0

示例 2:

輸入:nums = [9,4,1,7], k = 2
輸出:2
解釋:選出 2 名學生的分數,有 6 種方法:
- [9,4,1,7] 最高分和最低分之間的差值是 9 - 4 = 5
- [9,4,1,7] 最高分和最低分之間的差值是 9 - 1 = 8
- [9,4,1,7] 最高分和最低分之間的差值是 9 - 7 = 2
- [9,4,1,7] 最高分和最低分之間的差值是 4 - 1 = 3
- [9,4,1,7] 最高分和最低分之間的差值是 7 - 4 = 3
- [9,4,1,7] 最高分和最低分之間的差值是 7 - 1 = 6
可能的最小差值是 2

提示:

  • 1 <= k <= nums.length <= 1000
  • 0 <= nums[i] <= 105



題解

class Solution {public int minimumDifference(int[] nums, int k) {Arrays.sort(nums);if(k == 1) return 0;int n = nums.length;int min=Integer.MAX_VALUE;for(int i=0;i<=n-k;i++){if((nums[i+k-1]-nums[i])<min){min=nums[i+k-1]-nums[i];}}return min;}
}





在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715602.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715602.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715602.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Django 管網項目 三

Django 官網文檔 ??Writing your first Django app, part 2 | Django documentation | Django 本文內容涉及創建視圖 View&#xff0c;路由&#xff0c;和模版。并對內容進行渲染。 創建視圖 在我們的投票應用中&#xff0c;我們需要下列幾個視圖&#xff1a; 問題索引頁—…

ChatGPT支持下的PyTorch機器學習與深度學習技術應用

近年來&#xff0c;隨著AlphaGo、無人駕駛汽車、醫學影像智慧輔助診療、ImageNet競賽等熱點事件的發生&#xff0c;人工智能迎來了新一輪的發展浪潮。尤其是深度學習技術&#xff0c;在許多行業都取得了顛覆性的成果。另外&#xff0c;近年來&#xff0c;Pytorch深度學習框架受…

相關知識1111

一、 店鋪編號和相關負責人 1、天貓兄弟、錦格 京東凡越 福林哥 如萍姐 2、京東錦格 天貓凡越 林森 雷佳華 3、天貓從簡 京東從簡 孔哥 4、抖音錦格 拼多多凡越 鴻哥 不知道哪個店鋪編號&#xff1a;0 二、天貓京東聊天界面快捷搜索商品 1、 天貓只能根據標題搜索 2、京東是…

神經網絡之萬能定理python-pytorch實現,可以擬合任意曲線

神經網絡之萬能定理python-pytorch實現&#xff0c;可以擬合任意曲線 博主&#xff0c;這幾天一直在做這個曲線擬合的實驗&#xff0c;講道理&#xff0c;網上可能也有很多這方面的資料&#xff0c;但是博主其實試了很多&#xff0c;效果只能對一般的曲線還行&#xff0c;稍微…

java之抽象類

什么是抽象類&#xff1f; 抽象就是不能具體化&#xff0c;不能實例化 作為父類&#xff0c;讓子類去實現 abstract修飾類就是抽象類 abstract修飾方法就是抽象方法修飾符 abstract class 類名{修飾符 abstract 返回值類型 方法名(形參列表); }public abstract class A {//不…

CTFHUB--文件包含漏洞--RCE

文件包含漏洞 文件包含漏洞也是一種注入型漏洞&#xff0c;其本質就是輸入一段用戶能夠控制的腳本或者代碼&#xff0c;并讓服務端執行。有時候由于網站功能需求&#xff0c;會讓前端用戶選擇要包含的文件&#xff0c;而開發人員又沒有對要包含的文件進行安全考慮&#xff0c;…

CSS【詳解】居中對齊 (水平居中 vs 垂直居中)

水平居中 內部塊級元素的寬度要小于容器(父元素) 方案一&#xff1a;文本居中對齊&#xff08;內聯元素&#xff09; 限制條件&#xff1a;僅用于內聯元素 display:inline 和 display: inline-block; 給容器添加樣式 text-align:center<!DOCTYPE html> <html lang&q…

裴蜀定理(Bézout’s identity)

裴蜀定理&#xff08;Bzout’s identity&#xff09;是一個數論定理&#xff0c;也稱為貝祖等式。它表明&#xff0c;對于任意給定的兩個整數 a a a 和 b b b&#xff0c;存在整數 x x x 和 y y y&#xff0c;使得它們滿足以下方程&#xff1a; a x b y gcd ? ( a , b )…

【簡略知識】項目開發中,VO,BO,PO,DO,DTO究竟是何方妖怪?

前言 在項目開發中&#xff0c;是否需要定義VO&#xff08;視圖對象&#xff09;&#xff0c;BO&#xff08;業務對象&#xff09;&#xff0c;PO&#xff08;持久化對象&#xff09;&#xff0c;DO&#xff08;領域對象&#xff09;&#xff0c;DTO&#xff08;數據傳輸對象&…

CKKS EXPLAINED, PART 3: ENCRYPTION AND DECRYPTION

CKKS EXPLAINED, PART 3: ENCRYPTION AND DECRYPTION Introduction 在之前的文章中&#xff0c;CKKS解釋了第二部分&#xff1a;完整的編碼和解碼&#xff0c;我們看到了如何實現CKKS的編碼器和解碼器&#xff0c;這使我們能夠將向量轉換為多項式&#xff0c;反之亦然。這一步…

笨辦法學 Python3 第五版(預覽)(三)

原文&#xff1a;Learn Python the Hard Way, 5th Edition (Early Release) 譯者&#xff1a;飛龍 協議&#xff1a;CC BY-NC-SA 4.0 練習 30&#xff1a;假如 這是你將要輸入的下一個 Python 腳本&#xff0c;它向你介紹了if語句。輸入這個代碼&#xff0c;確保它能夠完美運行…

怎么快速編輯視頻

背景&#xff1a;怎么簡單快速編輯視頻 利用FFmpeg功能&#xff0c;簡單快速編輯視頻&#xff0c;如按9:16提前剪切視頻、替換背景音樂。 下載FFmpeg&#xff1a;https://ffmpeg.org/download.html 將FFmpeg的路徑添加到環境變量中&#xff1a; Windows&#xff1a;在系統的環…

Home-credit海外貸款信貸產品源碼/線上貸款產品大全/貸款平臺軟件源碼/海外借貸平臺

測試環境&#xff1a;Linux系統CentOS7.6、寶塔、PHP7.3、MySQL5.6&#xff0c;根目錄public&#xff0c;偽靜態laravel5&#xff0c;開啟ssl證書 語言&#xff1a;中文簡體、英文 laravel框架的程序有點多&#xff0c;這個團隊估計主要就是搞laravel開發的&#xff0c;基本上…

前端架構: 腳手架通用框架封裝之腳手架注冊和命令注冊開發(教程二)

腳手架注冊和命令注冊 1 &#xff09;腳手架的注冊 接上文&#xff0c;仍舊在 abc-cli 項目中參考&#xff1a;https://blog.csdn.net/Tyro_java/article/details/136381086之前初始化的時候&#xff0c;使用的是 yargs, 現在我們想要使用 commander在cli包中安裝 commander $…

2024 最新版 Compose material3 下拉刷新

2024 最新版 Compose material3 下拉刷新&#xff0c;版本 > 1.2.0 的 compose material3 已經更新了下拉刷新組件的 Api 見 https://developer.android.com/jetpack/androidx/releases/compose-material3?hlzh-cn#1.2.0 使用方法&#xff1a;https://developer.android.…

YOLOv9獨家原創改進|增加SPD-Conv無卷積步長或池化:用于低分辨率圖像和小物體的新 CNN 模塊

專欄介紹&#xff1a;YOLOv9改進系列 | 包含深度學習最新創新&#xff0c;主力高效漲點&#xff01;&#xff01;&#xff01; 一、文章摘要 卷積神經網絡(CNNs)在計算即使覺任務中如圖像分類和目標檢測等取得了顯著的成功。然而&#xff0c;當圖像分辨率較低或物體較小時&…

可以用來測試的接口

實際開發過程中&#xff0c;我們可以通過postman工具來測試接口 get請求 https://api.github.com/events?id1&nameuser post請求 http://httpbin.org/post 參數1&#xff1a;key1value1 參數2&#xff1a;key2value2

(C語言)回調函數

回調函數是什么&#xff1f; 回調函數就是?個通過函數指針調?的函數。 如果你把函數的指針&#xff08;地址&#xff09;作為參數傳遞給另?個函數&#xff0c;當這個指針被?來調?其所指向的函數 時&#xff0c;被調?的函數就是回調函數。回調函數不是由該函數的實現?…

技術閱讀周刊第十四期:常用的 Git 配置

技術閱讀周刊&#xff0c;每周更新。 歷史更新 20231122&#xff1a;第十一期20231129&#xff1a;第十二期20240105&#xff1a;第十三期&#xff1a;一些提高生產力的終端命令20240112&#xff1a;第十四期&#xff1a;Golang 作者 Rob Pike 在 GopherConAU 上的分享 How I w…

探索Manticore Search:開源全文搜索引擎的強大功能

在當今信息爆炸的時代&#xff0c;數據的快速檢索變得至關重要。無論是在電子商務網站、新聞門戶還是企業內部文檔&#xff0c;高效的搜索引擎都是確保用戶滿意度和工作效率的關鍵因素之一。而在搜索引擎領域&#xff0c;Manticore Search 作為一款開源的全文搜索引擎&#xff…