在由N个元素构成的集合S中,找出最小元素C,满足C=A-B,其中A,B是都集合S中的元素,没找到则返回-1

package bianchengti;
/*
 * 在由N个元素构成的集合S中,找出最小元素C,满足C=A-B,
 * 其中A,B是都集合S中的元素,没找到则返回-1
 */
public class findMinValue {
    //快速排序
     public static void sort(int a[], int low, int hight) {
            if (low > hight) {
                return;
            }
            int i, j, key;
            i = low;
            j = hight;
            key = a[i]; // 用第一个元素作为基准
            while (i < j) { // 从表的两端交替向中间扫描
                while (i < j && a[j] >= key) {
                    j--;
                }
                if (i < j) {
                    a[i] = a[j];
                    i++;
                }

                while (i < j && a[i] < key) {
                    i++;
                }

                if (i < j) {
                   a[j] = a[i];
                   j--;
                }
            }

            a[i] = key;//将基准数值替换回 a[i]          

            sort(a, low, i - 1); //递归调用,把key前面的完成排序

            sort(a, i + 1, hight); //递归调用,把key后面的完成排序

        }

    public static int getResult(int a[]) {
        int min=a[0];//最小值

         for (int i = a.length - 1; i > 1 ; i--) {

             for (int j = a.length - 1; j > 0; j--) {

                 if (a[i] - a[j-1] ==min) {
                   return min;
                 }
             }
         }
        return -1;
    }

    public static void print(int src[]) {
         for (int i = 0; i < src.length; i++) {
                System.out.print(src[i] + " ");
            }
         System.out.println();
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
          int a[] = {6,2,7,3,8,9};
          print(a);
          sort(a, 0, a.length - 1);
          print(a);
          System.out.println(getResult(a));
    }

}
时间: 2024-10-25 08:58:01

在由N个元素构成的集合S中,找出最小元素C,满足C=A-B,其中A,B是都集合S中的元素,没找到则返回-1的相关文章

C语言 选择排序算法原理和实现 从数组中 找出最小的元素然后交换位置

#include <stdio.h> int main(void) { /* 选择排序算法 原理:从数组中 找出最小的元素然后交换位置: */ int a[10] = {9,5,10,7,2,3,1,6,8,4}; int i=0,j=0; int n = sizeof(a)/4; //外循环n-1轮 for(i=0;i<n-1;i++){ int pos = i;//始终指向最小的位置 for(j=i+1;j<n;j++){ if(a[j]<a[pos]){ pos = j

给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 print-all-combinations-of-given-length

// 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 /* Input: set[] = {'a', 'b'}, k = 3 Output: aaa aab aba abb baa bab bba bbb Input: set[] = {'a', 'b', 'c', 'd'}, k = 1 Output: a b c d package recursion; import java.util.ArrayList; public class N_sets_form

在字符串中找出连续最长的数字串 在字符串中找出连续最长的数字串,并把这个串的长度返回

写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存.例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9, #include<iostream> using namespace std; int ContinueMax(char *

C语言:对传入sp的字符进行统计,三组两个相连字母“ea”&quot;ou&quot;&quot;iu&quot;出现的次数,并将统计结果存入ct所指的数组中。-在数组中找出最小值,并与第一个元素交换位置。

//对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中. 1 #include <stdio.h> 2 #include <string.h> 3 #pragma warning (disable:4996) 4 void fun(char*sp ,int *ct) 5 { 6 int a=0, b=0, c=0; 7 while (*sp != '\0') 8 { 9 if (*s

位运算-异或运算-只出现一次的数字-给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 示例: 输入: [2,2,1] 输出: 1 输入: [4,1,2,1,2] 输出: 4 GO: func singleNumber(nums []int) int { var num int for i := 0; i < len(nums); i++ { num = num ^ nums[i]; } return num; } PHP: class Solution { /** * @par

【学】从一个数组中找出重复最多的元素,并统计重复个数

通过json,将数组中的值都传给json中的键,利用json中的键是不能重复的性能,同时如果遇到重复的键,那就让这个键的值自增1,这样就能统计出重复次数 上面的方法可以得出一个json,但是还不够,因为无法比较json里的键或者值的大小,就要再将Json里的每组数据组成一个个小的json装到一个数组中,将统计的数量赋给每个json中的值,利用数组的sort的比较函数进行排序即可 function myMaxElement(arr){ var json = {}; for (var i=0; i<

一句话的代码,从集合中找出第一个重复字符的方法javascript版。

有的时候需求是这样的: 找出集合中第一个重复的字符所在的位置,刚才看了园内某自许为算法的代码,感觉非常之啰嗦故写了以下代码! 本人对神马算法之类的完全不懂,但那些伪算法家们也别出来装蒜.一句话:不要欺负俺没文化好不好! 别的不说看代码: Array.prototype.searchFirstNotRepeat = function () { var curArr = this, val; while (-1 == (val = curArr.indexOf(curArr.shift())));

快速从2个List集合中找出相同/不同元素

最近刚好涉及到从2个不同集合中找出不同的元素的需求,以下为测试代码 1.利用 apache collection 工具内中的方法,附上坐标 <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency> c

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

class Solution { public: vector twoSum(vector& nums, int target) { vector temp; for(int i=0;i<nums.size();i++) { for(int j=i+1;j<nums.size();j++) { if(i!=j) { if(nums[i]+nums[j]==target) { temp.push_back(i); temp.push_back(j); break; } } } } ret