例如 arr=[1,2,1,1,1] k=3累加和为 3的最长子数组为[1,1,1] 所以结果为3 思路方法: 两个指针 left 和right 初始值都是0 都在左边 sum 代表 子数组 left.....right的和 len 一直记录累加和为k的所有子数组中最大子数组的长度 根据 sum与k的比较结果决定 left 跟 right 哪一个移动!!!! package TT;publicclass Test70 {publicstaticint getMaxLength(int[] arr, int k){if(arr==null || arr.length==0 || k<...
1.树是一种数据结构,树的一些相关的术语:
结点的度:一个结点的后继结点的个数。
树的度:树中度值最大的结点的度被称为树的度。
树的深度:树的层次数。
分支结点:度值大于0的结点,分支结点至少含有一个后继,分支结点也称为非终端结点。
叶子结点:树中的度值为0的结点。
双亲结点:树中某个结点的前驱结点,也成为父节点。
子女结点:树中某结点的后继结点。
兄弟结点:树中同一层的结点。
2.二叉树
(1)二叉树是一种特殊的...
Search in Rotated Sorted Array I && IILeetcode对有序数组进行二分查找(下面仅以非递减数组为例):int binarySort(int A[],int lo,int hi,int target){while(lo <= hi){int mid = lo +(hi - lo)/2;if(A[mid]== target)return mid;if(A[mid]< target) lo = mid +1;else hi = mid -1;}}对有序的旋转数组进行二分查找:eg. [7, 8, 9, 3, 4, 5, 6]在数组中有且仅有一个 断点 (数字由大变小)。还是通过折半...
#include <iostream>#include <malloc.h>usingnamespacestd;void deal_sum(int a[],int n,int val)
{int count = 1;int m = n;int *b= (int*)calloc(0,n);while(m--){count*=2;}while(count--){for(int i=0;i<n;i++){if(0==b[i])b[i]=1;else{b[i]=0;break;}}int sum = 0;for(int i=0;i<n;i++){if(b[i]==1)sum+=a[i];}if(sum==val){for(int i=0;i<n;i++){if(b[i]==1)cout<<a[i]<<" ";}cout<<endl;} }
}
int main()
{int a[]={1,2,...
1、算法思想
问题描述:从数组array中找出第i小的元素(要求array中没有重复元素的情况),这是个经典的“线性时间选择(Selection in expected linear time)”问题。
思路:算法导论215页9.2 Selection in expect linear time
2、java实现
思路:算法导论216页伪代码/*期望为线性时间的选择算法,输入要求,array中没有重复的元素*/public static int randomizedSelect(int[] array,int start,int end,int i) {if (start==end) {...
<!DOCTYPE>
<html><head><meta charset="utf-8"><title>IFE JavaScript Task 01</title></head>
<body><ul id="source"><li>北京空气质量:<b>90</b></li><li>上海空气质量:<b>70</b></li><li>天津空气质量:<b>80</b></li><li>广州空气质量:<b>50</b></li><li>深圳空气质量:<b>40</b></li><li>福州空气质量:<b>32</b></li><li>成都空气质量:<b>90</b></li></ul><ul id="resort"><!-- <li>第一名:北京空气质量:<b>90</b></l...
http://www.verejava.com/?id=16992690199232/*
用选择排序:
思路:1. 将数组中剩下的没有排序的元素中选出最小的一个, 插入已经排序的后面
*/
public class SelectSort {public static void sort(int[] arrays){int minIndex;//保存选择最小值的索引for (int i = 0; i < arrays.length-1; i++) {minIndex=i;int minValue=arrays[minIndex];//保存每次循环最小值为循环的第一元素的值for (int j = i; j < arrays.length-1; j++) {...
学习数组,需要弄清楚数组定义、内存分配及特点、操作常见问题、常见操作、数组嵌套等概念和程序实现。 1. 定义:同一种数据类型的集合,其实数组就是一个容器 2. 好处:数组有索引(下标从0开始),方便操作 3. 格式:元素类型 [] 数组名 = new 元素类型[元素个数或者数组长度] 元素类型 [] 数组名 = new 元素类型[]{元素1,元素2...} 4. 例如: int [] arr = new int[10] ...
小算法:合并两个有序数组,合并之后仍然有序 1/** 2 * 合并两个有序数组,合并后仍然有序3 * @param a 要合并的数组A4 * @param b 要合并的数组B5 * @param c 合并后的数组C6*/ 7publicstaticvoid merge(int a[] ,int b[],int c[]){8int lengthA = a.length;9int lengthB = b.length;
1011int indexA = 0;
12int indexB = 0;
13int indexC = 0;
1415while(indexA < lengthA && indexB < lengthB){
16if(a[indexA...
这是一道面试的算法题,当然可以用很多排序算法来实现,这些都是比价常规的。但是这道题要求不能排序,并且时间复杂度不能超过O(n^2).这里我们借用快速排序的衍生算法来实现。关于快速排序的实现,可以参考《经典算法学习——快速排序》这篇博客。示例代码上传至:https://github.com/chenyufeng1991/Front-N。 每一次的快排,都需要找一个基准值,然后从数组的两边交替开始和基准值比较,右边比基准值小的数移到左边,左边比...
最近参加了huawei的一个比赛,初赛刚结束,结果未知。虽然过程艰辛,经常搞到夜里1点,但是学到的知识还是挺多的。在学校没有参加很多的比赛也是一种遗憾,不得不说在学校自己的时间是真的多啊。感慨一番,继续造题。加油! 题目:一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6] 输出:[1,6] 或 [6,1] ...
应用场景:编写的五子棋程序,有存盘退出和继续上盘的功能问题分析:因为二位数组的很多默认值是0,所以记录了很多没有意义的数据稀疏数组(SparseArray)基本介绍 当一个数组中**大部分元素是0或者为同一个值**时,可以使用稀疏数组保存改数组稀疏数组处理方法:* 记录数组一共**有多少行,有多少个不同的值*** 把具有不同值的元素的行列值记录在一个小规模的数组中,从而**缩小程序**的规模
应用实例思路及实现二位数组转稀疏数组...
转载自:http://blog.csdn.net/sailor_8318/article/details/30543831~n无序数组时间复杂度为O(n)排序有1,2,....一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且一次只能交换两个数.(华为)分析:数组的特点是值和下标满足一定的关系,以此作为交换的终止条件。但这个算法的时间复杂度如何证明是O(n)呢? void sortOnorder1(int array[], int len){ int temp; for(int ...
问题:从2,4,3,5,7,1,9,10中找出多个数,和为11这个题目是0 1背包的一个变体,因此可用DP来解。DP解法的关键在于得到递推公式,对于这个问题来说,DP公式为:j ∈[1,11]i ∈[0,7]dp[i][j] = 从(arr[i], dpArr[i-1][j], arr[i] + dpArr[i-1][j], arr[i]+ dpArr[i-1][j-arr[i]]) 中选出小于j的最大值具体代码如下:void Main()
{DpFind();Console.WriteLine(dpArr);
}static int n = 11;
static int[] arr = new int[]{2,4,3,5,7,9,1...
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [?2,1,?3,4,?1,2,1,?5,4],
the contiguous subarray [4,?1,2,1] has the largest sum = 6.一、问题描述:输入一个整数数组,求数组中连续的子数组使其和最大。二、解题方法://从左至右扫描数组,如果前面一段连续子数组的和小于0,则置为0,重新从下个元素开始累加
int maxSubArray(vect...