刷题-排序简单-手撸总结 1) 剑指 Offer 40. 最小的k个数 - 重点2)剑指 Offer 03. 数组中重复的数字3 ) 169. 多数元素4)面试题 01.01. 判定字符是否唯一 【位运算】n) 模板 1) 剑指 Offer 40. 最小的k个数 - 重点 【重点】 【原理】:解法可以用哈希表来解决该题 【注意点】:要注意重复的数字,所以 计次的桶中要减减,同时判断数组个数是否满足k。 【提升解析】: 【复杂度】:时间O(n) 空间O(n) 2)剑指 Offer 03. 数组中重复的数字 【题目特点】:题目要找任意一个重复的数字即可。 【解题API】: 【原理】:直觉直接用哈希可以解决。但是一般用完哈希之后,再想想看看能不能减小空间复杂度。这个和数学方式不相关。 但是题目,如果排好顺序的话每个索引都是与当前值相等的。不等的话,我也不知道,直接答案,交换两个数的位置,值作为索引。节省空间。 【提升解析】: 【拓展点】: 【复杂度】:时间O(n) 空间O(1) 哈希表方法 要想起使用!set.add(num) 以及 Set<Integer> set = new HashSet<Integer>(); 操作 Set<Integer> set = new HashSet<Integer>(); int repeat = -1; for (int num : nums) { if (!set.add(num)) { repeat = num; break; } } return repeat; 3 ) 169. 多数元素 【题目特点】:次数 【解题API】: 【原理】:该题的较好的解法,是保存当前值和次数置为1,并不断判断下一位与当前位是否相等,从而次数++ 或--,因为多数元素大于n/2,所以最终一定是 那个多数元素。 【总结】:交换位置/次数++ -- 来减小空间复杂度。 【复杂度】:时间O(n) 空间O(1) 4)面试题 01.01. 判定字符是否唯一 【位运算】 n) 模板 【题目特点】: 【解题API】: 【原理】: 【提升解析】: 【拓展点】: 【复杂度】:时间O(n) 空间O(n)