581. 最短無(wú)序連續(xù)子數(shù)組
題目要求:
581. 最短無(wú)序連續(xù)子數(shù)組
給你一個(gè)整數(shù)數(shù)組?
nums
?,你需要找出一個(gè)?連續(xù)子數(shù)組?,如果對(duì)這個(gè)子數(shù)組進(jìn)行升序排序,那么整個(gè)數(shù)組都會(huì)變?yōu)樯蚺判颉?/p>請(qǐng)你找出符合題意的?最短?子數(shù)組,并輸出它的長(zhǎng)度。
示例 1:
輸入:nums = [2,6,4,8,10,9,15] 輸出:5 解釋?zhuān)?/strong>你只需要對(duì) [6, 4, 8, 10, 9] 進(jìn)行升序排序,那么整個(gè)表都會(huì)變?yōu)樯蚺判颉?示例 2:
輸入:nums = [1,2,3,4] 輸出:0示例 3:
輸入:nums = [1] 輸出:0提示:
1 <= nums.length <= 104
-105 <= nums[i] <= 105
解題思路:
我們定義一個(gè)數(shù)組num,拷貝原數(shù)組,然后對(duì)num進(jìn)行升序排序,再和原數(shù)組作比較,定義left為左邊第一個(gè)和原數(shù)組不相等的下標(biāo),定義right為右邊第一個(gè)和原數(shù)組不相等的下標(biāo),這樣我們就能找到最短子數(shù)組了,返回right - left + 1。
代碼:
class Solution {
public int findUnsortedSubarray(int[] nums) {
int len = nums.length;
if(len == 1) {
return 0;
}
int[] num = Arrays.copyOf(nums, len);
Arrays.sort(num);
//左邊界
int left = 0;
//右邊界
int right = len - 1;
//找出左邊界第一個(gè)不同的下標(biāo)
for(int i = 0; i < len; i++) {
if(num[i] == nums[i]) {
left++;
} else {
break;
}
}
//遍歷完了,left == len,即這個(gè)數(shù)組是有序的,則返回0
if(left == len) return 0;
//找右邊界第一個(gè)不相等的下標(biāo)
for(int i = len - 1; i >= 0; i--) {
if(num[i] == nums[i]) {
right--;
} else {
break;
}
}
return right - left + 1;
}
}
242. 有效的字母異位詞
題目要求:
242. 有效的字母異位詞
給定兩個(gè)字符串?
s
?和?t
?,編寫(xiě)一個(gè)函數(shù)來(lái)判斷?t
?是否是?s
?的字母異位詞。注意:若?
s
?和?t
?中每個(gè)字符出現(xiàn)的次數(shù)都相同,則稱(chēng)?s
?和?t
?互為字母異位詞。示例?1:
輸入: s = "anagram", t = "nagaram" 輸出: true示例 2:
輸入: s = "rat", t = "car" 輸出: false提示:
1 <= s.length, t.length <= 5 * 104
s
?和?t
?僅包含小寫(xiě)字母
解題思路:
定義兩個(gè)數(shù)組,這兩數(shù)組,每一個(gè)下標(biāo)都是存放26字母的其中唯一的一個(gè)下標(biāo),分別存題目中兩字符的字母?jìng)€(gè)數(shù),當(dāng)遍歷完 t 和 s 字符串,就比較這兩數(shù)組的每一個(gè)下標(biāo)都是否相等,相等就符合題目要求,不相等就不符合。
代碼:
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int[] numS = new int[26];
int[] numT = new int[26];
for(int i = 0; i < s.length(); i++) {
numS[s.charAt(i) - 'a']++;
}
for(int i = 0; i < t.length(); i++) {
numT[t.charAt(i) - 'a']++;
}
for(int i = 0; i < 26; i++) {
if(numS[i] == numT[i]) {
continue;
} else {
return false;
}
}
return true;
}
}
202. 快樂(lè)數(shù)
題目要求:
202. 快樂(lè)數(shù)
編寫(xiě)一個(gè)算法來(lái)判斷一個(gè)數(shù)?
n
?是不是快樂(lè)數(shù)。「快樂(lè)數(shù)」?定義為:
- 對(duì)于一個(gè)正整數(shù),每一次將該數(shù)替換為它每個(gè)位置上的數(shù)字的平方和。
- 然后重復(fù)這個(gè)過(guò)程直到這個(gè)數(shù)變?yōu)?1,也可能是?無(wú)限循環(huán)?但始終變不到 1。
- 如果這個(gè)過(guò)程?結(jié)果為?1,那么這個(gè)數(shù)就是快樂(lè)數(shù)。
如果?
n
?是?快樂(lè)數(shù)?就返回?true
?;不是,則返回?false
?。示例 1:
輸入:n = 19 輸出:true 解釋?zhuān)?12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1示例 2:
輸入:n = 2 輸出:false提示:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-753081.html
1 <= n <= 231 - 1
解題思路:
題目已經(jīng)告訴我們給定的n,它要么循環(huán)計(jì)算后的結(jié)果會(huì)是1,是1就返回true,要么計(jì)算的結(jié)果是無(wú)限循環(huán)的,那么肯定會(huì)計(jì)算過(guò)程中肯定會(huì)出現(xiàn)相同的結(jié)果,那么我們就用hash表,存放這些計(jì)算結(jié)果,如果計(jì)算的結(jié)果是1,就返回true,要是有重復(fù)出現(xiàn)的數(shù)字,就返回false。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-753081.html
代碼:
class Solution {
public boolean isHappy(int n) {
Set<Integer> set = new HashSet<>();
int result = 0;
int flg;
do {
while(n > 0) {
int tmp = n % 10;
result += tmp * tmp;
n /= 10;
}
if(!set.contains(result)) {
set.add(result);
} else {
return false;
}
n = result;
flg = result;
result = 0;
} while (flg != 1);
return true;
}
}
到了這里,關(guān)于LeetCode題:581. 最短無(wú)序連續(xù)子數(shù)組,242. 有效的字母異位詞,202. 快樂(lè)數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!