判断php生成一个有序数组数组是否有序

判断两个有序数组是否存在相同的元素
#include &stdio.h&
int checkCommonIn2Array(int *a,int size_a,int *b,int size_b)
high=size_b-1;
(i=0;i&size_a;i++)
&&& low=0;
high=size_b-1;
&&& while(low&=high)
//注意这里是&=
&&& middle =
(low+high)/2;
(a[i]==b[middle])
&&& return
&&& else if
(a[i] & b[middle])
low=middle+1;
high=middle-1;
&&& return
int checkCommonIn2Array_last(int *a,int size_a,int *b,int
&&& int i =
&&& int j =
(i&size_a&&j&size_b)
(a[i]==b[j])
&&& return
&&& else if
(a[i]&b[j])
&&& return
int main()
a[5]={1,2,3,4,5};
b[5]={5,12,13,45,64};
(1==checkCommonIn2Array_last(a,5,b,5))
printf("there is common element in array a and b\n");
printf("there is no common element in array a and b\n");
&&& return
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。2008年9月 C/C++大版内专家分月排行榜第二2008年4月 C/C++大版内专家分月排行榜第二2008年2月 C/C++大版内专家分月排行榜第二2007年7月 C/C++大版内专家分月排行榜第二
2011年10月 C/C++大版内专家分月排行榜第三2009年1月 C/C++大版内专家分月排行榜第三2008年10月 C/C++大版内专家分月排行榜第三2008年5月 C/C++大版内专家分月排行榜第三2007年6月 C/C++大版内专家分月排行榜第三2007年5月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。9被浏览464分享邀请回答12 条评论分享收藏感谢收起public class YouXuShuzu_QiuGongGongYuansu {
public static void main(String[] args) {
int[] queue1 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,19,22};//18个元素
int[] queue2 = {1,5,7,8,9,10,12,13,15,19,22};//11个元素
int[] queue3 = {1,5,7,8,11,13,19,20,22};//9个元素
commonOnes(queue1,queue2,queue3);
* 3个有序的数组(从小到大),求在3个数组中都存在的公共元素&br&
* 思想是:&br&
* (1)使用3个指针,在3个数组上从左向右遍历。3个指针初始化时均在第一个元素上。&br&
* (2)比较指针指向的3个数,判断是否相等,&br&
如果3个数相等,则输出,且3个指针向右移动一步;&br&
如果3个数不全相等,则找出最大值N。比较小的数所在的2个数组,2个指针分别向右移动,直到找到&=N的数或数组尽头,指针停止移动。&br&
如果某个数组到了尽头且未找到&=N的数,则程序结束。&br&
否则,继续执行(2).&br&
public static void commonOnes(int[] queue1,int[] queue2,int[] queue3){
int i=0,j=0,k=0;
int count=0;//循环次数
int pointCount=0;//指针移到次数,应该是O(n)
while(i&queue1.length && j&queue2.length && k&queue3.length){
if( queue1[i] == queue2[j] && queue1[i] == queue3[k]){
//如果3个数相等,则输出,且3个指针向右移动一步;
System.out.print(queue1[i]+" ");
i++;j++;k++;pointCount+=3;
}else if(i==queue1.length-1 && j==queue2.length-1 && k==queue3.length-1){
//如果某个数组到了尽头且未找到&=N的数,则程序结束
//如果3个数不全相等,则找出最大值N。比较小的数所在的2个数组,2个指针分别向右移动,直到找到&=N的数或数组尽头,指针停止移动。
int maxNum = max(queue1[i],queue2[j],queue3[k]);
while(queue1[i]&maxNum && i&queue1.length-1){i++;pointCount++;}
while(queue2[j]&maxNum && j&queue2.length-1){j++;pointCount++;}
while(queue3[k]&maxNum && k&queue3.length-1){k++;pointCount++;}
System.out.print("\n循环次数:"+count);
System.out.print("\n指针移到次数(最大情况是等于3个数组的总长度):"+pointCount);
private static int max(int a, int b, int c) {
int temp = a&b ? b:a;
return temp&c ? c:
1 5 7 8 13 19 22
循环次数:14
指针移到次数(最大情况是等于3个数组的总长度):38
浏览: 95251 次
来自: 杭州
spirngMVC,只需要在Controller类加上@Exc ...
* firefox 31,不会hold,请求后服务器直接传输数 ...
IE更烂,他不是hold住了,他会向服务器发起两次请求,服务器 ...
对Play暂时保持观望态度,play和django很类似吧。
源码可以发给我参考下吗?fj_
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'一个有序数组,值有可能有负值,也有可能没有,现需要找出其中绝对值最小的值。
遍历数组,找到绝对值最小值,时间复杂度O(n),n为元素个数。
二分查找,因为数组有序,可以利用二分查找,时间复杂度O(logn)。
分析步骤:
如果第一个数为正数,说明整个数组没有负数,直接返回第一个数
如果最后一个数为负数,说明整个数组没有正数,直接返回最后一个数
数组元素有正有负,说明绝对值最小的元素肯定在正负数交界处,需要二分查找上场:
如果a[mid]&0,因为数组是升序,说明绝对值最小的数不会出现在a[mid]左边,同时判断a[mid+1]元素的正负,如果为负数,那么需要在mid右侧区间进行查找,如果a[mid-1]不为负,那么说明这两个数是数组中正负交界点,返回这两个数的绝对值较小的。
如果a[mid]&0,因为数组是升序,说明绝对值最小的数不会出现在a[mid]右边,同时判断a[mid-1]元素的正负,如果为负数,那么说明这两个数是数组中正负交界点,返回这两个数的绝对值较小的,如果a[mid-1]不为负,那么需要在mid以左的区间进行查找。
如果a[mid] == 0,那么a[mid]即为绝对在最小的元素。
function selectAbsMinNum(array $arr)
$start = 0;
$len = count($arr) - 1;
if ($arr[0] & 0) { //正数数组
return $arr[0];
if ($arr[$len] & 0) { //负数数组
return $arr[$len];
while ($start & $len) {
$mid = floor(($start + $len) / 2);
if ($arr[$mid] & 0) {
if ($arr[$mid - 1] & 0) {
$len = $mid - 1;
return min($arr[$mid], -$arr[$mid - 1]);
} elseif ($arr[$mid] & 0) {
if ($arr[$mid + 1] & 0) {
$start = $mid + 1;
return min(-$arr[$mid], $arr[$mid + 1]);
return $arr[$mid];
$sortArr = [-5, -4, -4, -4, 5, 7, 9];
echo selectAbsMinNum($sortArr), PHP_EOL;
阅读(...) 评论()

我要回帖

更多关于 php生成一个有序数组 的文章

 

随机推荐