# 利用object的key唯一性删除数组重复项
# uniq.html<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
var arr=[12,34,22,34,55,90,66,12,90,9,12,33,22]
//将数组转换为object,数组的元素转换为Object的key
function toObject(arr){
var obj={}
for (var i = arr.length - 1; i >= 0; i--) {
obj[arr[i]]=true
}
...
最近在读《数据结构、算法与应用》这本书,把书上的习题总结一下,用自己的方法来实现了这些题,可能在效率,编码等方面存在着很多的问题,也可能是错误的实现,如果大家在看这本书的时候有更优更好的方法来实现,还请大家多多留言交流多多指正,谢谢7. 假定用一维数组a[0 : size-1]来存储一组元素。如果有n个元素,可以把它们存储在a[0],..., a[n-1]中。当n超过si ze时, 数组将不足以存储所有元素 , 必须分配一个更大的数组。类似地...
出题:给定一个乱序链表,节点值为ASCII字符,但是其中有重复项,要求去除重复项并保证不改变剩余项的原有顺序;分析:创建一个256(2^8)大小的bool数组,初始化为false,顺序读取链表,将字母对应位置为false的重新标记为true并保留节点,将字母对
应位置为true的保持并删除节点;时间复杂度为O(N),空间复杂度为常量。注意删除节点和不删除节点的情况下,pre和cur的移动操作不相同;解题: 1struct Node {2char value;3 ...
题目:给定一数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在构造过程中,不允许使用除法:要求O(1)空间复杂度和O(n)的时间复杂度;除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、堆空间和全局静态变量等);实现程序(主流编程语言任选)实现并简单描述。(注意黑体)中间变量解法: NSArray *firstArr=[[NSArray alloc]initWithObjects:@"3",@"5",@"8",@"10", nil];NSMutableArray...
第一:消失的数字对于一个int数组其特点为:
1. 其元素个数为n
2. 每个元素的值为[0,n]之间(前闭后闭区间)
3. 元素的值没有重复,即0-n,这n+1个数字中的n个数字组成的数组1.1 问题在时间复杂度为O(n)和空间复杂度为O(1)的条件下,找到缺失的数字1.2 解法利用异或的特点:1. 0 ^ A = A2. 0 ^ A ^ A = 0
将0 与数组中每个元素以及0-n分别进行异或计算 ;
由于性质2,可得结果 = 0 ^ 缺失数字 = 缺失数字(性质1)1.3 代码实现#def...
/// <summary>/// 获取两个数组的所有结合的结果值/// </summary>/// <param name="args"></param>static void Main(string[] args){var strs1 = new string[] { "w", "q", "b", "s", "g" };var strs2 = new string[] { "1", "2", "3" };Console.WriteLine(NewString(strs1, strs2)); }public static string NewString(string[] strs1, string[] strs2){Stopwatch sw = new Stopwatch();sw.Start();var len1 = strs1.Length;var ru...
数组,都懂的,直接看代码吧,实现以下功能:创建数组查找在索引上的值查找数组中是否含有值删除在索引上的值添加一个值查找一个值在数组的位置public class ArrayStructures {private int[] theArray = new int[50];private int arraySize = 10;public void generateRandomArray(){for (int i =0; i< arraySize;i++){theArray[i] = (int)(Math.random()*10 + 10);}}public void printArray(){StringBuffer sb = new StringBuffer(...
头文件 1 typedef int ElementType;2 3#ifndef _STACK_AR_4#define _STACK_AR_5 6struct StackRecord;7 typedef struct StackRecord *Stack;8 9int IsEmpty(Stack S);
10int IsFull(Stack S);
11 Stack CreateStack(int MaxElements);
12void DisposeStack(Stack S);
13void MakeEmpty(Stack S);
14void Push(ElementType X, Stack S);
15ElementType Top(Stack S);
16void Pop(Stack S);
17ElementType TopAndPop(Stack S);
1819#...
原题说明:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]原题链接:https://leetcode-cn.com/problems/3sum 解法一:基于HashMap的暴力求解参考力扣题:https://leetcode-cn.com/problems/two-sum/可以...
一、未排序正数数组中累加和为给定值的最长子数组长度题目:给定一个数组arr,该数组无序,但每个数都是正数,再给定一个正数K。求arr的所有子数组中所有元素相加和为K的最长子数组长度。例如:arr=[1,2,1,1,1],K=3,累加和为3的最长子数组为[1,1,1],return 3。程序:publicstaticint getMaxLength(int[] arr, int k) {
if (arr == null || arr.length == 0 || k <= 0) {
return 0;}
int left = 0;
int right = 0;
int sum = arr...
问题:一个整数数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1)。分析:这是一个很新颖的关于位运算的题目。首先考虑这个问题的一个简单版本:一个整数数组里除了一个数字之外,其他的数字都出现两次,请写程序找出这个只出现一次的数字。这个问题的突破口在哪?题目中数组的性质是只有一个整数出现一次,其他的都出现两次。这样的话就使我们想到了...
题解位置 class Solution {public void rotate(int[] nums, int k) {int len = nums.length; // 数组长度k = k % len; // 简化一下k// 外循环int count = 0; // 计数器for (int start = 0; count < len; start ++) {int cur= start; // 当前位置 int curVal = nums[pre]; // 当前位置元素do {int next = (cur+ k) % len; // 要移动到的位置nextint tmp = nums[next]; // 记录next位置本来存...
在看《信息检索导论》的时候看到了这个算法的实现,书里是用来演示如何将两个term的倒排列表求交集。伪代码如下:INTERSECT( p1, p2 )1 answer ← {}2 while p1 != NIL and p2 != NIL do3 if docID( p1) = docID( p2 ) then4 ADD( answer, docI D( p1 ) )5 p1 ← next( p1 )6 p2 ← next( p2 )7 else if docID( p1 ) < docID( p2 ) then8 p1 ← next( p1 )9 else p2 ← next( p2 )10 return answer乍一看这段...
题目:数组 A 由 1000 万个随机正整数 (int) 组成,设计算法,给定整数 n,在 A 中找出 a 和 b,使其符合如下等式:n = a + b 解题思路: 1. 1000w个随机正整数占用空间大概38-40MB,并不是很大,但是仍需要考虑如果数量级继续增大的情况。最好找到不用把数组加载到内存的方法。2. 若n给定,则数组中大于n的数都没有用,有用的只是那些处于0和n之间的数字,所以1000w个数字其实可以缩减为长度为n的数组,但是n也可能比1000w大。这并...
题目如题:数组是一个常规一维数组,直接放代码,代码讲解见注解#include<stdio.h>
void swap(int a[],int i,int j)
{a[i]=a[i]+a[j]-(a[j]=a[i]);
}
void insert(int a[],int i,int n)//插入算法,每次把第i个数放到这个数组的最后面{int key=a[i];//插入算法的核心思想和插入排序当中是一样的,设定一个key,让key插入到最后面while(i<n){a[i]=a[i+1];++i;if(i+1==n)//当i处于数组最后一位的时候,停止循环break;}a[i]=key;//在数...