二分查找的思想很好理解,但要写出没有bug的代码却并不是件容易的事。对于有序数组的二分查找,可以遵循一些套路快速写出无错代码。下面先给出二分查找有序数组的一些问题,所有问题参考了《编程之美》。1、给定非降序数组A,求任意一个i使得A[i]等于target,如不存在则返回-1。2、给定非降序数组A,求...
分类:
其他好文 时间:
2015-07-14 17:04:41
阅读次数:
135
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,诶一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否包含了该整数。 例如下面的二维数组就是每行、没列都递增排序。如果在这个数组中查找数字7,则返回true(找得到);如果查找数字5,由于...
分类:
编程语言 时间:
2015-07-13 22:06:24
阅读次数:
122
问题描述给定两个有序数组,返回这两个数组的中位数。如果中位数有两个,则返回它们的平均值。e.g. [1, 3, 5]和[2, 4, 6]的中位数是3.5解决思路如果两个数组的长度之和为奇数,则中位数有一个;否则中位数为其中两个的平均值。从两个数组中找第k个数,可以使用递归的思路。程序首先,写出在有序...
分类:
编程语言 时间:
2015-07-12 16:59:32
阅读次数:
203
题目意思很简单将两个有序数组合并之后的中位数找出来。题目要求使用log(m+n)的时间复杂度来做。虽然言简意赅,但不得不承认这个题目我自己想了好久也没做出来,隐约觉得应该使用寻找第k大数的算法来做,但是具体到这个题目,编码多次都以失败告终,所以不得不去网上参考下别人的思路和代码。参考链接:http:...
分类:
其他好文 时间:
2015-07-06 12:12:04
阅读次数:
108
https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/Remove Duplicates from Sorted Array IIFollow up for "Remove Duplicates":What if d...
分类:
编程语言 时间:
2015-07-05 12:19:38
阅读次数:
131
https://leetcode.com/problems/merge-sorted-array/Merge Sorted ArrayGiven two sorted integer arraysnums1andnums2, mergenums2intonums1as one sorted arra...
分类:
编程语言 时间:
2015-07-05 12:19:06
阅读次数:
127
https://leetcode.com/problems/remove-duplicates-from-sorted-array/Remove Duplicates from Sorted ArrayGiven a sorted array, remove the duplicates in pl...
分类:
编程语言 时间:
2015-07-05 10:59:32
阅读次数:
118
问题描述
给出一个有序数组,就地移除重复元素,保持每个元素只出现一次,并返回新数组的长度。
问题分析
这个比较简单,直接使用两个指针,一个在前,一个在后,扫描一遍数组即可。时间复杂度为O(n^2)。
比如数组A = { 1,1, 2, 3, 3 },看下图,思想简单明了。
代码实现
#include
using namespace std;
//去除数组...
分类:
编程语言 时间:
2015-07-02 22:45:49
阅读次数:
244
当一个数组有序时,要向其中插入元素,可以先使用二分搜索查找其要插入的位置,位置确定后可以执行插入操作。
其中二分搜索的循环体如下(部分代码,具体见文章最后): while(low<=high){//循环条件
mid = (low+high)/2; if(a[mid]<val){
low = mid+1;
}else if(...
分类:
编程语言 时间:
2015-07-02 10:08:37
阅读次数:
131
二分查找是在完全有序数组(或部分有序)中对某一元素进行快速查找的算法。时间复杂度为O(logn)。实现方式有递归和非递归。非递归实现 public int binarySearch(int[] nums, int key) { if (nums == null || nums.length == ....
分类:
其他好文 时间:
2015-06-28 12:30:48
阅读次数:
96