1822.數組元素積的符號
(資料圖片)
已知函數signFunc(x)將會根據x的正負返回特定值:
x是正數,返回1。如果x是負數,返回-1。如果x是等于0,返回0。給你一個整數數組nums。令product為數組nums中所有元素值的乘積。
返回signFunc(product)。
示例 1:
輸入:nums = [-1,-2,-3,-4,3,2,1]輸出:1解釋:數組中所有值的乘積是 144 ,且 signFunc(144) = 1示例 2:
輸入:nums = [1,5,0,2,-3]輸出:0解釋:數組中所有值的乘積是 0 ,且 signFunc(0) = 0示例 3:
輸入:nums = [-1,1,-1,1,-1]輸出:-1解釋:數組中所有值的乘積是 -1 ,且 signFunc(-1) = -1提示:
1 <= nums.length <= 1000-100 <= nums[i] <= 100解題思路一【Java語言】時間0 ms擊敗 100%
內存41.9 MB擊敗 20.81%
這道題是判斷給定數組中的元素有多少個負數,根據負數的個數決定返回1還是-1。如果數組中有0,直接返回0。
具體解題思路如下:
初始化一個變量negative用于記錄負數的個數。遍歷給定數組nums中的每一個元素。如果當前元素num等于0,則直接返回0。如果當前元素num小于0,則將負數個數negative加一。遍歷完數組后,判斷負數個數negative是否為奇數,如果是則返回-1,否則返回1。這個程序用到的知識點包括:
循環結構:使用for循環遍歷數組中的每一個元素。分支結構:使用if語句判斷當前元素是否為0或負數。算術運算:使用求余運算符判斷負數個數是否為奇數。數組:使用數組來存儲給定的整數序列。class Solution { public int arraySign(int[] nums) { int negative=0; for(int num:nums){ if(num==0){ return 0; } if(num<0){ negative++; } } return negative%2==1?-1:1; }}1502. 判斷能否形成等差數列題目鏈接1502. 判斷能否形成等差數列
題目描述給你一個數字數組arr。
如果一個數列中,任意相鄰兩項的差總等于同一個常數,那么這個數列就稱為等差數列。
如果可以重新排列數組形成等差數列,請返回true;否則,返回false。
示例 1:
輸入:arr = [3,5,1]輸出:true解釋:對數組重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相鄰兩項的差分別為 2 或 -2 ,可以形成等差數列。示例 2:
輸入:arr = [1,2,4]輸出:false解釋:無法通過重新排序得到等差數列。提示:
2 <= arr.length <= 1000-10^6 <= arr[i] <= 10^6解題思路一【Java語言】時間1 ms擊敗 97.94%
內存39.9 MB擊敗 15.26%
這道題是判斷給定數組arr是否能夠構成等差數列。如果能夠構成等差數列,則返回true;否則,返回false。
具體解題思路如下:
引入java.util.Arrays中的sort方法對給定數組arr進行排序。使用for循環遍歷數組中的每一個元素arr[i],從索引1開始,并且遍歷到倒數第二個元素。在循環中,判斷當前元素arr[i]與其前一個元素arr[i-1]的差是否等于當前元素arr[i+1]與arr[i]的差。如果不相等,則說明不能構成等差數列,返回false。如果循環結束后仍然沒有返回false,則說明數組arr中的每個元素都滿足等差數列的條件,返回true。這個程序用到的知識點包括:
數組:使用數組來存儲給定的整數序列。引入其他類:使用import語句引入java.util包中的ArrayList類。數據排序:使用Arrays類中的sort方法對數組進行排序。循環結構:使用for循環遍歷數組中的每一個元素。分支結構:使用if語句判斷等差數列的條件,并根據判斷結果返回對應的布爾值。import java.util.ArrayList;class Solution { public boolean canMakeArithmeticProgression(int[] arr) { Arrays.sort(arr); for(int i=1; i896.單調數列題目鏈接896.單調數列
題目描述如果數組是單調遞增或單調遞減的,那么它是單調的。
如果對于所有i <= j,nums[i] <= nums[j],那么數組nums是單調遞增的。 如果對于所有i <= j,nums[i]> = nums[j],那么數組nums是單調遞減的。
當給定的數組nums是單調數組時返回true,否則返回false。
示例 1:
輸入:nums = [1,2,2,3]輸出:true示例 2:
輸入:nums = [6,5,4,4]輸出:true示例 3:
輸入:nums = [1,3,2]輸出:false提示:
1 <= nums.length <= 105-105<= nums[i] <= 105解題思路一【Java語言】時間1 ms擊敗 97.87%
內存53.8 MB擊敗 51.24%
這道題的解題思路是判斷給定數組nums是否是單調的(單調遞增或單調遞減)。如果是單調的,則返回true;否則,返回false。
具體解題思路如下:
首先檢查數組的長度。如果數組只有一個元素,則認為是單調的,直接返回true。如果數組為空,即長度為0,則認為不是單調的,直接返回false。判斷數組的單調性。如果數組的第一個元素小于等于最后一個元素,說明是單調遞增的情況,執行遞增判斷的循環操作;否則,執行遞減判斷的循環操作。在循環中,遍歷數組中的每個元素nums[i],從索引1開始。如果是遞增判斷,判斷當前元素nums[i]是否小于前一個元素nums[i-1],如果小于,則說明不是單調的,返回false。如果是遞減判斷,判斷當前元素nums[i]是否大于前一個元素nums[i-1],如果大于,則說明不是單調的,返回false。如果循環結束后沒有返回false,則說明數組nums是單調的,返回true。這個程序用到的知識點包括:
數組:使用數組來存儲給定的整數序列。循環結構:使用for循環遍歷數組中的每一個元素。分支結構:使用條件判斷語句if來判斷數組的單調性,并根據判斷結果返回對應的布爾值。class Solution { public boolean isMonotonic(int[] nums) { if(nums.length == 1) return true; if( nums.length == 0) return false; if( nums[0] <= nums[nums.length - 1]){ for(int i = 1 ; i < nums.length ; i++){ if( nums[i] < nums[i-1] ) return false; } }else{ for(int i = 1 ; i < nums.length ; i++){ if( nums[i] > nums[i-1]) return false; } } return true; }}13. 羅馬數字轉整數題目鏈接13. 羅馬數字轉整數
題目描述羅馬數字包含以下七種字符:I,V,X,L,C,D和M。
字符 數值I 1V 5X 10L 50C 100D 500M 1000例如, 羅馬數字2寫做II,即為兩個并列的 1 。12寫做XII,即為X+II。27寫做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 <= 15s僅含字符("I", "V", "X", "L", "C", "D", "M")題目數據保證s是一個有效的羅馬數字,且表示整數在范圍[1, 3999]內題目所給測試用例皆符合羅馬數字書寫規則,不會出現跨位等情況。IL 和 IM 這樣的例子并不符合題目要求,49 應該寫作 XLIX,999 應該寫作 CMXCIX 。關于羅馬數字的詳盡書寫規則,可以參考羅馬數字 - Mathematics。解答思路一【Java】時間4 ms擊敗 58.6%
內存42.5 MB擊敗 40.64%
解題思路是將給定的羅馬數字字符串s轉換為對應的整數值。具體解題思路如下:
首先創建一個HashMap,用于存儲羅馬數字與對應的整數關系。將每個羅馬數字字符作為鍵,對應的整數值作為值,存入HashMap中。
初始化一個變量result,用于存儲最終的整數結果。
使用for循環遍歷字符串s中的每一個字符。
在循環中,獲取當前字符的對應整數值,通過map.get()方法獲取。
判斷下一個字符是否存在,并且下一個字符對應的數值是否大于當前字符對應的數值。如果滿足條件,說明需要進行減法運算,將當前字符對應的數值取反后加入result;否則,將當前字符對應的數值加入result。
遍歷完成后,返回最終的整數結果result。
這個程序用到的知識點包括:
HashMap:使用哈希映射來建立羅馬數字與整數之間的關系。字符串的遍歷:使用for循環遍歷字符串中的每一個字符。條件判斷:根據當前字符及其后一個字符的數值大小關系,確定是否需要進行減法運算。字符串與整數的轉換:通過map.get()方法獲取字符對應的整數值,并進行相應的運算。class Solution { public int romanToInt(String s) { HashMap map = new HashMap<>(); map.put("I", 1); map.put("V", 5); map.put("X", 10); map.put("L", 50); map.put("C", 100); map.put("D", 500); map.put("M", 1000); int result = 0; for (int i = 0; i < s.length(); i++) { int currentValue = map.get(s.charAt(i)); // 如果下一個字符存在且比當前字符對應的數值大,則將當前數值取反加入result if (i < s.length() - 1 && map.get(s.charAt(i + 1)) > currentValue) { result -= currentValue; } else { result += currentValue; } } return result; }} 58. 最后一個單詞的長度題目鏈接58. 最后一個單詞的長度題目描述給你一個字符串s,由若干單詞組成,單詞前后用一些空格字符隔開。返回字符串中最后一個單詞的長度。
單詞是指僅由字母組成、不包含任何空格字符的最大子字符串。
示例 1:
輸入:s = "Hello World"輸出:5解釋:最后一個單詞是“World”,長度為5。示例 2:
輸入:s = " fly me to the moon "輸出:4解釋:最后一個單詞是“moon”,長度為4。示例 3:
輸入:s = "luffy is still joyboy"輸出:6解釋:最后一個單詞是長度為6的“joyboy”。提示:
1 <= s.length <= 104s僅有英文字母和空格" "組成s中至少存在一個單詞解題思路一【Java】時間0 ms擊敗 100%
內存39.8 MB擊敗 40.23%
具體解題思路如下:
使用split方法將字符串s按照空格進行拆分,得到一個字符串數組temp。拆分后,數組temp的最后一個元素就是最后一個單詞。
返回數組temp中最后一個元素的長度,即temp[temp.length-1].length()。
這個程序用到的知識點包括:
字符串的拆分:使用split方法按照指定的分隔符將字符串拆分為字符串數組。數組的使用:通過數組索引獲取字符串數組中的元素。字符串的長度計算:使用length()方法獲取字符串的長度。class Solution { public int lengthOfLastWord(String s) { String temp[]=s.split(" "); return temp[temp.length-1].length(); }}709.轉換成小寫字母題目鏈接709.轉換成小寫字母
題目描述給你一個字符串s,將該字符串中的大寫字母轉換成相同的小寫字母,返回新的字符串。
示例 1:
輸入:s = "Hello"輸出:"hello"示例 2:
輸入:s = "here"輸出:"here"示例 3:
輸入:s = "LOVELY"輸出:"lovely"提示:
1 <= s.length <= 100s由 ASCII 字符集中的可打印字符組成解答思路一【Java】時間0 ms擊敗 100%
內存39.5 MB擊敗 75.76%
class Solution { public String toLowerCase(String s) { return s.toLowerCase(); }}工程日志2023-07-04之前提到要繞開題目給的誤導性思路,但是一直拿不出來一個合適的方向,今天的1822. 數組元素積的符號題目讓我有了一點方向,我愿稱之為透過現象看本質這部分的題目普遍都比較簡單,迷惑性的特點占多一些,邏輯性的要求較少,基本上只要能夠看透本質,都是能秒殺的題目
標簽:














