leetcode:兩數之和 ii - 輸入有序陣列
題目描述:
給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。
函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。
示例:
輸入: numbers = [2, 7, 11, 15], target = 9
輸出: [1,2]
解釋: 2 與 7 之和等於目標數 9 。因此 index1 = 1, index2 = 2 。
思想:
使用雙指標,乙個指標指向值較小的元素,乙個指標指向值較大的元素。指向較小元素的指標從頭向尾遍歷,指向較大元素的指標從尾向頭遍歷。
**:
class solution else
}return res;
}}
leetcode:兩數之和
題目描述:
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。
示例:給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
思想:使用map鍵值對列表;迴圈遍歷陣列,每訪問乙個元素,將其值和下標存入map中;每次迴圈訪問時,查詢map中是否已存在與它和為target的key,若存在則輸出此時的 i 和該key對應的value。
**:
class solution
return false;
}}
leetcode:反轉字串中的母音字母
題目描述:
編寫乙個函式,以字串作為輸入,反轉該字串中的母音字母。
示例:
輸入: "leetcode"
輸出: "leotcede"
思想:
首尾雙向遍歷沒有問題;注意以下兩點:
**:
class solution
if(!set.contains(str[j]))
char temp = str[i];
str[i] = str[j];
str[j] = temp;
++i;--j;
}return new string(str);
}}
leetcode:驗證回文字串2
題目描述:
給定乙個非空字串 s,最多刪除乙個字元。判斷是否能成為回文字串。
示例:
輸入: "abca"
輸出: true
解釋: 你可以刪除c字元。
思想:
自己想的第一種思路:首尾雙向遍歷,碰到不相等的,向內移位,記錄移位次數,超過兩次返回false。這樣有乙個問題,無法判斷是移動low還是移high。
正確做法:首尾雙向遍歷,碰到不相等的,判斷內層是否是回文串(單獨寫乙個函式),因為只允許刪除乙個字元,最多呼叫兩次函式,時間複雜度不會太高。
**:
class solution
low++;
high--;
}return true;
}private boolean isvalid(string s,int low,int high)
low++;
high--;
}return true;
}}
資料結構演算法 雙指標
演算法核心思想 雙指標多用於遍歷陣列,可以同時遍歷乙個陣列或分別遍歷不同的陣列。常見的設計思想如下 對於排序後的陣列,雙指標分別指向陣列的頭尾,遍歷方向相反,用於搜尋。雙指標指向兩個陣列,分別遍歷 快慢指標 滑動視窗 兩數之和 167.two sum ii input array is sorted...
資料結構與演算法 雙鏈表
刪除結點 遍歷元素 雙鏈表的高階操作 與單鏈表一樣,我還是建議用過掌握基礎操作來拼湊成大的操作。單鏈表指標域只有乙個next指標,指向下乙個結點,這就導致了它只能從前往後訪問。為了彌補這一缺陷,我們可以往指標域裡再加入乙個指標prior,用於指向前面的結點,這樣就可以實現雙向訪問了 與單鏈表相似,建...
資料結構與演算法 雙端佇列
雙端佇列和普通佇列不同的地方是既可以隊首和隊尾進行插入,同時也就可以從隊首和隊尾進行remove刪除 同時不遵循先進先出或者先進後出的規則,這需要通過具體的演算法實現來確定,這個資料結構的實現過程如下 class deque def init self self.items defisempty s...