二分制--找最小值\去重

找最小值的算法

去重的算法

<script>
var arr = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 5, 5, 6, 7, 8, 9, 0, 0, 3, 4, 5];

function findInArr(arr,n){
for(var i = 0; i < arr.length; i++){
if(arr[i] == n)return true;
}
return false;
}

function removeDup(arr, s, e){

if(s > e){
return false;
}else if(s == e){
return [arr[s]];
}

var c = Math.floor((s + e) / 2);
var l = removeDup(arr, s, c);
var r = removeDup(arr, c + 1, e);

for(var i = 0; i < r.length; i++){
if(!findInArr(l,r[i])){
l.push(r[i]);
}
}
return l;
}

console.log(removeDup(arr, 0, arr.length - 1));
</script>

时间: 2024-10-10 00:40:17

二分制--找最小值\去重的相关文章

[ACM] POJ 3258 River Hopscotch (二分,最大化最小值)

River Hopscotch Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6697   Accepted: 2893 Description Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully jumping from rock to rock in a river. T

poj 2456 Aggressive cows,二分,最大化最小值

描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000). 但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗.为了不让牛互相伤害.John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢? 输入 有多组测试数据,以EOF结束. 第

二分法之数组去重和找最小值

二分&数组去重 <script type="text/javascript"> var arr = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 5, 5, 6, 7, 8, 9, 0, 0, 3, 4, 5];//创建个数组 function findInArr(arr,n){ //判断数组循环遍历数组每一项,如果这个数组的每一项与r[ i ]的每一项相等就返回true,否则返回false for(var i = 0; i < arr.len

LeetCode Find Minimum in Rotated Sorted Array 旋转序列找最小值(二分查找)

题意:有一个有序序列A,其内部可能有部分被旋转了,比如A[1...n]被转成A[mid...n]+A[1...mid-1],如果被旋转,只有这种形式.问最小元素是?(假设没有重复元素) 思路:如果是序没乱,直接返回A[1],如果乱了,二分查找还是可以的,O(1)可能就不行了. 二分要点:mid有可能就是所要找的最小元素,所以不能轻易写出l=mid+1这样的语句,可能最小值就被忽略过了,因为我们无法直接判断A[mid]是否就是最小值.所以尽量应该是l=mid这样写,但是要防止死循环. 具体来说,可

二分查找--循环数组找最小值

#include<iostream> using namespace std; int main() { int arr[] = {5,6,7,8,9,1,2,3,4}; int left = 0, right = 8; cout<<"循环有序数组arr[]={"; for(int i = 0; i < 9; i++) if(i != 8) cout<<arr[i]<<","; else cout<<

二分查找找一个数所在的范围

#include<iostream> using namespace std; //选好二分法的策略 ,二分查找找到一个数所在的范围 比如 2,4,8,12,15,20,23,56,79,90 16的范围就是15 20 /**找到比key大的第一个数,比key大的最小数**/ int findRight(int data[],int low,int high,int key) { int up=high; int mid; while(low<high) { mid=(low+high)

Find Minimum in Rotated Sorted Array 旋转数组中找最小值 @LeetCode

O(n)的算法就不说了,这题主要考查的是 O(logn)的算法. 有序数组容易想到使用二分查找解决,这题就是在二分基础上做一些调整.数组只有一次翻转,可以知道原有序递增数组被分成两部分,这俩部分都是有序递增的(这题只需要考虑有序数组的递增情况). 假如翻转后的数组以第 x 个结点分为两部分 A[0..x] 和 A[x+1..n].则 A[0..x] 这一段是有序递增的, A[x+1..n] 这一段也是有序递增的.并且因为原数组是有序递增的,A[0..x] 中所有数都会大于 A[x+1..n] 中

python 三维数组找最小值

#声明三维数组 num=[[[33,45,67],[23,71,66],[55,38,66]], [[21,9,15],[38,69,18],[90,101,89]]] value=num[0][0][0]#设置main为num数组的第一个元素 for i in range(2): for j in range(3): for k in range(3): if(value>=num[i][j][k]): value=num[i][j][k] #利用三重循环找出最小值 print("最小值

冒泡,二分制,模拟摇奖

1. 实现冒泡排序算法. //冒泡排序 int [] a={1,7,9,3,6,0,2}; int z; for(int i=0;i<a.length;i++) { for(int j=i;j<a.length;j++) { if(a[i]>a[j]) { z=a[i]; a[i]=a[j]; a[j]=z; } } System.out.print(a[i]);  } 2.实现二分查找法. public int binarySearch(int[] data,int aim){//以i