1蜂绎、編寫(xiě)一個(gè) SQL 查詢,來(lái)刪除 Person 表中所有重復(fù)的電子郵箱实蔽,重復(fù)的郵箱里只保留 Id 最小 的那個(gè)荡碾。
+----+------------------+
| Id | Email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
| 3 | john@example.com |
+----+------------------+
Id 是這個(gè)表的主鍵。
例如局装,在運(yùn)行你的查詢語(yǔ)句之后,上面的 Person 表應(yīng)返回以下幾行:
+----+------------------+
| Id | Email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
+----+------------------+
解題思路:
#使用group by分組,查詢最小的id铐尚,刪除表中不包括這些id的項(xiàng)
delete from person where id not in (select t.id from (select min(id) id from person group by email)t)
2拨脉、給定一個(gè)只包括 '(',')'宣增,'{'玫膀,'}','['爹脾,']' 的字符串帖旨,判斷字符串是否有效。
有效字符串需滿足:
左括號(hào)必須用相同類型的右括號(hào)閉合灵妨。
左括號(hào)必須以正確的順序閉合解阅。
注意空字符串可被認(rèn)為是有效字符串。
解題思路:
#使用棧結(jié)構(gòu)先進(jìn)先出的特點(diǎn)泌霍,push進(jìn)一個(gè)左括號(hào)货抄,根據(jù)題目得知下一個(gè)括號(hào)必定為右括號(hào),所以我們可以push進(jìn)當(dāng)前相反的括號(hào)朱转,判斷下一個(gè)括號(hào)是否為剛push進(jìn)入棧的符號(hào)即可
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (char c:s.toCharArray()){
if (c == '('){
stack.push(')');
}else if (c == '['){
stack.push(']');
}else if (c == '{'){
stack.push('}');
}else if (stack.isEmpty() || c != stack.pop()){
return false;
}
}
return stack.isEmpty();
}
}
3蟹地、給你一個(gè)字符串 s 和一個(gè) 長(zhǎng)度相同 的整數(shù)數(shù)組 indices 。請(qǐng)你重新排列字符串 s 藤为,其中第 i 個(gè)字符需要移動(dòng)到 indices[i] 指示的位置怪与。返回重新排列后的字符串。
# 示例1
輸入:s = "codeleet", indices = [4,5,6,7,0,2,1,3]
輸出:"leetcode"
解釋:如圖所示缅疟,"codeleet" 重新排列后變?yōu)?"leetcode" 琼梆。
# 示例2
輸入:s = "aiohn", indices = [3,1,4,2,0]
輸出:"nihao"
解題思路:
public static void restoreString(String s, int[] indices) {
char[] chars = s.toCharArray();
char[] s1 = new char[indices.length];
int j = 0;
for (int i:indices){
s1[i] = chars[j];
j++;
}
System.out.println(new String(s1));
}