
剑指offer
五环旗
这个作者很懒,什么都没留下…
展开
-
1.找出数组中重复的数字
方法1:通过构建HashMap,记录每个值的重复情况。 复杂度:O(n),O(1) class Solution { public int duplicateInArray(int[] nums) { for(int i = 0;i < nums.length;i++){ if(nums[i]<0||nums[i]>nums....原创 2019-08-25 11:44:37 · 176 阅读 · 0 评论 -
2.二维数组的查找
因此我们可以从整个矩阵的右上角开始枚举,假设当前枚举的数是 xx: 如果 xx 等于target,则说明我们找到了目标值,返回true; 如果 xx 小于target,则 xx 左边的数一定都小于target,我们可以直接排除当前一整行的数; 如果 xx 大于target,则 xx 下边的数一定都大于target,我们可以直接排序当前一整列的数; 排除一整行就是让枚举的点的横坐标加一,排除一整列...原创 2019-08-25 12:12:01 · 103 阅读 · 0 评论 -
3.从尾到头打印链表
Attention: ArrayList<Integer> list = new ArrayList<>(); ArrayList<Integer> list = new LinledList<>(); list.get(i);add(),remove() 1.递归方式 /** * Definition for singly-li...原创 2019-08-25 15:19:20 · 98 阅读 · 0 评论 -
4.重建二叉树
易错点:边界条件,两个数组的前后位置都要保存。模拟计算得到边界即可。一次是对的。 可以设置类变量,让函数更简单 使用哈希表存inorder的位置更好,更易找到位置。o(1) 因为是无序的数组,不能用二叉查找。 有序数组中使用二叉查找函数:Arrays.binarySearch(arr,target); /** * Definition for a binary tree node. ...原创 2019-08-25 15:22:59 · 129 阅读 · 0 评论 -
5.数组中出现一半的数字
题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 举例:输入一个长度为9的数组{1,2,3,2,2,2,5,4,2},由于数字2在数组中出现了5次,超过数组长度一半,因此输出2。 思路:摩尔投票法 遇到不相同的pair就删除它...原创 2019-09-02 15:04:17 · 202 阅读 · 0 评论