![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数组
小布丁value
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 39. 数组中出现次数超过一半的数字
数组中出现次数超过一半的数字方法一:哈希表方法二:摩尔投票法方法一:哈希表哈希表:1.我们使用哈希映射(HashMap)来存储每个元素以及出现的次数。key 表示匀速,vlaue表示次数2.我们用一个循环遍历数组nums 并将数组中的每个元素加入到哈希映射中。3.之后我们遍历哈希映射中所有的元素,返回出键最大的值。4.可以是使用遍历数组nums时候使用打擂台的方法,维护最大的值,省去了最后对哈希表的映射时间复杂度: O(n)空间复杂度:O(n)public class Day071原创 2021-07-19 18:27:05 · 117 阅读 · 1 评论 -
调整数组顺序使奇数位于偶数前面
代码思路:不开辟新内存:双指针,left 指向奇数,right指向偶数代码实现:class Solution { public int[] exchange(int[] nums) { int left=0, right=nums.length-1; while(left<right){ if(nums[left]%2!=0) { left++; continue.原创 2021-07-18 21:53:30 · 62 阅读 · 0 评论 -
旋转数组中的最小数字(中)
无重复元素if numbers[mid]>numbers[right] 说明前面有序,最小值一定在后面left=mid+1if numbers[mid]<numbers[right] 说明后半部分一定有序,最小值在前面right=mid;模拟整个过程会发现当 left==right时退出循环找到numbers[left]即位最小值有重复元素如果有重复元素numbers[right]=numbers[left]right–;不等的时候又按照无重复元素进行判断即可.原创 2021-07-18 21:25:15 · 53 阅读 · 1 评论 -
二维数组的查找
代码实现public class Day0718 { public static void main(String[] args) { int [] nums={1,3,5,7,8,9}; int recur = recur(0, nums.length - 1, 7, nums); System.out.println(recur); } public static int recur(int begin,int end,i...原创 2021-07-18 20:19:57 · 52 阅读 · 0 评论 -
二分查找(递归和非递归)
代码思路:1.初始化指针,begin=0,end=nums.length-1;2.当nums[mid]<target时:begin=mid+1;当nums[mid]>target时: end=mid-1;nums[mid]= target时:结束循环,返回mid;3.考虑特殊形况 left可不可以等于right:可以,但数组中只有一个元素时,如果没有等于这个条件,就会漏掉一个元素非递归实现代码如下时间复杂度O(logN);空间复杂度O(1);class Solution .原创 2021-07-18 19:53:34 · 363 阅读 · 0 评论