一直做梦的猫

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2013年5月13日

摘要: 假设原数组序列为abcd1234,要求变换成的数组序列为1234abcd,即循环右移了4位。比较之后,不难看出,其中有两段的顺序是不变的:1234和abcd,可把这两段看成两个整体。右移K位的过程就是把数组的两部分交换一下。变换的过程通过以下步骤完成:1. 逆序排列abcd:abcd1234 → dcba1234; 2. 逆序排列1234:dcba1234 → dcba4321; 3. 全部逆序:dcba4321 → 1234abcd。void reverse(char arr[], int left, int right) { for(int i = left, j = right; ... 阅读全文
posted @ 2013-05-13 18:10 一直做梦的猫 阅读(332) 评论(0) 推荐(0)

摘要: 方法一:将数组a[]排序为数组b[],比较两个数组,如果a[i]==b[i],则a[i]即为一个这样的数。时间复杂度为O(NlogN)。方法二:维护两个数组min[]和max[],max[i]为a[i]左边的数的最大值,min[i]为a[i]右边的最小值,扫描两遍数组就可得到,再比较,如果max[i]<=a[i]<=min[i],则a[i]是一个这样的数。void findElems(int arr[], int length) { int *maxL = new int[length]; int *minR = new int[length]; for(int i = 0;... 阅读全文
posted @ 2013-05-13 15:58 一直做梦的猫 阅读(278) 评论(0) 推荐(0)

摘要: bool isPopOrder(int pushA[], int popA[], int length) { stack<int> st; int i = 0, j = 0; while(i < length && j < length) { st.push(pushA[i++]); while(!st.empty() && popA[j] == st.top()) { st.pop(); j++; } } return (st.empty() && j == length);} 阅读全文
posted @ 2013-05-13 15:57 一直做梦的猫 阅读(155) 评论(0) 推荐(0)

摘要: 平衡点:比如int numbers[]={1,3,5,7,8,25,4,20}; 25前面的总和为24,25后面的总和也是24,25这个点就是平衡点。假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点,要求返回任何一个平衡点。int findBalanceNum(int arr[], int length) { int *left = new int[length]; int *right = new int[length]; for(int i = 0; i < length; i++) { if(i == 0) { ... 阅读全文
posted @ 2013-05-13 15:56 一直做梦的猫 阅读(277) 评论(0) 推荐(0)

摘要: 写一个函数找出一个整数数组中第二大的数const int MINNUMBER = -32767;int find_sec_max(int data[], int count){ int maxnumber = data[0]; int sec_max = MINNUMBER; for(int i = 1; i < count; i++) { if(data[i] > maxnumber) { sec_max = maxnumber; maxnumber = data[i]; } ... 阅读全文
posted @ 2013-05-13 15:52 一直做梦的猫 阅读(273) 评论(0) 推荐(0)