兩數之和
題目鏈接
參考鏈接:
題目描述:
暴力法
雙重循環查找目標值
class Solution {public int[] twoSum(int[] nums, int target) {int[] res = new int[2];for(int i = 0 ; i < nums.length ; i++){boolean isFind = false;for(int j = i + 1 ; j < nums.length ; j++){if(nums[i] + nums[j] == target){res[0] = i;res[1] = j;isFind = true;break;}}if(isFind)break;}return res; }
}
哈希表
利用HashMap將nums的下標和它的值對應起來Map,將遍歷過的值存儲下來,每次查找Map之中是否存在target-nums[i]的值,存在的話,該記錄的下標j和當前下標i即為結果。
class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map = new HashMap<>();for(int i = 0 ; i < nums.length ; i++){if(map.containsKey(target - nums[i])){return new int[]{map.get(target - nums[i]) , i};}map.put(nums[i],i);}return new int[0];}
}
兩數之和
題目鏈接
參考鏈接:
題目描述:
思路:根據題意,可以得出一個結論,需要將字母組成相同的詞放入同一個List之中,因此,對每個String轉換成char[](S.toCharArray()),隨后對其進行排序,將排序之后的值轉換成字符串key,判斷key是否已經存在,不存在則新建List,若存在則將該列表取出向其中添加當前的字符串。
class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String, List<String>> map = new HashMap<>();for(String s : strs){char[] sortedString = s.toCharArray();Arrays.sort(sortedString);String key = new String(sortedString);List<String> list = map.getOrDefault(key,new ArrayList<>());list.add(s);map.put(key,list);}return new ArrayList<List<String>>(map.values());}
}
最長連續序列
題目鏈接
參考鏈接:
題目描述:
思路:將nums之中的所有數字放入Set之中,隨后遍歷set,x為當前的數字,如果x為連續數字序列的起點,則繼續在set之中查找x+1是否存在,直到查找到y,那么這個連續序列的最長長度為y-x,對每個數字執行此操作,保存最大長度即可。
class Solution {public int longestConsecutive(int[] nums) {int ans = 0;Set<Integer> st = new HashSet<>();for (int num : nums) {st.add(num);}for (int num : st) {// 如果當前的數只是連續數字之中的一個,而不是連續數字的最小數字,跳過當前數字。if (st.contains(num - 1)) {continue;}// num是起點,所以我們需要遍歷整個連續的額數字序列,直到不存在int y = num + 1;while (st.contains(y)) {y++;}ans = Math.max(ans, y - num);}return ans;}
}