1. 程式人生 > >解決矩陣中一行含有多個相同最大值的鞍點查詢法

解決矩陣中一行含有多個相同最大值的鞍點查詢法

package classPack;
import bascPack.ArrayTest;
import java.util.*;
/**
 * Created by cloud on 2017/7/9.
 */
public class TwoDimensionTest {
    public static void main(String[] args) {
//        int row = 3, column = 3;                   //這裡註釋的部分是自己也可以自定義一個二維陣列初始化的入口
//        int[][] arr = new int[row][column];
//        init(arr);
        int[][] arr={{5,6,6,6},{10,10,7,9},{11,9,8,8},{15,8,6,7},{4,6,5,6}};
        ArrayTest.myprint2(arr);
        searchSaddlePiont(arr);
    }

    private static void searchSaddlePiont(int[][] arr) {
        for (int m = 0; m <arr.length ; m++) {
            Map<Integer, Integer> map = rowSearch(arr,m);
            Set<Map.Entry<Integer,Integer>> entrySet=map.entrySet();
            Iterator<Map.Entry<Integer, Integer>> it = entrySet.iterator();
            while (it.hasNext()) {
                Map.Entry<Integer, Integer> me = it.next();
                Integer j = me.getKey();
                Integer i = me.getValue();
                columnSerach(i, j, arr);
            }
        }


}

    public static Map<Integer, Integer> rowSearch(int[][] arr, int i) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
            int max = arr[i][0];
            for (int j = 0; j < arr[i].length; j++) {
                if (arr[i][j] > max)
                    max = arr[i][j];
            }
            for (int j = 0; j <arr[i].length ; j++) {
                if (arr[i][j] == max)
                    map.put(j, i);
            }
        System.out.println("行最大值座標(行在後面):"+map);
        return map;
    }

    private static void init(int[][] arr) {
        Random random = new Random();
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = random.nextInt(10);
            }

        }
    }

    public static void columnSerach(int i, int j,int[][] arr) {
        int min = arr[i][j];
        int flag=1;
        for (int k = 0; k <arr.length ; k++) {
            if(arr[k][j]<min){
                System.out.println("第"+(i+1)+"行沒有鞍點");
                flag = 0;
                break;
            }
        }
        if (flag == 1) {
            System.out.println("第"+(i+1)+"行存在鞍點arr["+i+"]"+"["+j+"]="+arr[i][j]);
        }
    }
}

結果如下圖:

下面換一個5*4矩陣進行測試,這裡換矩陣只要在源程式中更改陣列初始化的數值即可,在程式中將二維陣列初始化為下面這樣:

int[][] arr={{5,6,6,6},{10,10,7,9},{11,9,8,8},{15,8,6,7},{4,6,5,6}};
結果如下:


若是要測試別的矩陣是否有鞍點,只要自定義初始化的矩陣值即可,有問題的可以和我一起交流,歡迎。


相關推薦

解決矩陣一行含有相同查詢

package classPack; import bascPack.ArrayTest; import java.util.*; /** * Created by cloud on 2017/7/9. */ public class TwoDimensionTest

Oracle欄位的方法

已知表TB的資料如下 SQL> select * from tb;        ID CHINESE    MATH ENGLISH ---------- ---------- ---------- ----------    1001       89       98       87    1

VS2010開啟專案提示未能正確載入解決方案一個或專案

今天開啟vs2010專案,竟然提示“未能正確載入解決方案中一個或多個專案”,還有什麼詳細去輸出看,我在網上找了下,沒有解決,我看輸出下邊是說“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\Microsoft.Cpp.x64.t

編寫一個字串(a~z)過濾函式,對於字形符串出現的相同的字形符,將非首次出現的字元過濾掉

public class StringFilter { public static String stringFilter(String input) { boolean[] bools = new boolean[26]; for (int i = 0; i <

shell 腳本獲取mysql字段的

mysql 腳本 shel 從mysql中查詢出的結果為:mysql -Ne "SELECT ip,port FROM op.host WHERE os=‘linux‘ and type=‘支持‘" +------------+------+ | 10.3.1.155 | 22 | | 10.

劍指offer系列——二叉搜尋樹的第k結點,資料流的位數,滑動視窗的

二叉搜尋樹的第k個結點 題目描述 給定一棵二叉搜尋樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8)    中,按結點數值大小順序第三小結點的值為4。 解題思路: 二叉搜尋樹中序遍歷就能排好序,所以中序遍歷到第k個結點就是第k小的結點。 程式

java三、菜單新增修改、猜數字大小

com nbsp 大小 .com java img image ava 分享 java三個取最大值、菜單新增修改、猜數字大小

oracle 資料庫對於列求

1.案例:   SELECT GREATEST('36', '55', '34') V_MAX, LEAST('36', '55', '34') V_MIN FROM DUAL Oracle比較一列的最大值或者最小值,我們會不假思索地用MAX和MIN函式,但是對於比較一行的最大值

輸出10整數

注意:將輸出最大值語句放在for迴圈之外,否則會輸出每次比較的最大值 #include<stdio.h> void Max(int array[]) { int max = array[0]; for (int i = 0; i <= 10; i++) { if

Python遞迴求出列表(包括列表的子列表)的

          Python遞迴求出列表(包括列表中的子列表)中的最大值 要求:求出列表中的所有值的最大數,包括列表中帶有子列表的。 按照Python給出的內建函式(max)只能求出列表中的最大值,無法求出包括列表中的子列表的最大值 Python3程式碼如下: #

Java獲取一個數組的

先定義一個數組,獲取其中的最大值和最小值 package Hello; public class test { public static void main(String[] args) {

Oracle取某幾個數的

Oracle中取某幾個數的最大值最小值 一直有誤區認為Oracle或者說關係型資料庫中沒有取某些資料中最大值最小值的函式,其實是存在的 分別為: greatest( expr1, expr2, ... expr_n ) least( expr1, expr2, ...

Sliding Window 單調佇列解決--經典滑動視窗問題--求視窗的

這就要用到單調遞減或單調遞增佇列來實現,它的頭元素一直是佇列中的最小值或最大值。我們可以從佇列的末尾插入一個元素,可以從佇列的兩端刪除元素。 插入元素: 對於單調遞減佇列:隊頭放最大值,為了保持佇列的遞減性,我們在插入元素v的時候,要將隊尾元素與v比較,如果隊尾<

求任意個數的(利用可變引數列表)

可變引數列表是通過巨集來實現的,這些巨集定義於stdarg.h標頭檔案中。這個標頭檔案聲明瞭一個型別va_list和三個巨集va_start,va_arg,va_end.我們可以宣告一個型別為va_list的變數與這幾個巨集配合使用,訪問引數的值。

求n個數兩數異或的(字母樹)

#include <stdio.h> #include <string.h> #include <math.h> #include <iostream> #include <string> #include <

求一個數組, 連續幾個數的,及其變種

import java.util.Arrays; import java.util.Scanner; public class KeShui { public static int max = 0; //網易瞌睡 public static void maxiva

把陣列的數拼接起來,求()

問題分析 最暴力的解法就是把所有的組合都找出來, 然後排序得到最大值(或者最小值),這樣還搞什麼演算法,直接拋棄. 這個問題的思路為: 在一個數組中依次選出最合適的值放在結果中. 那麼問題就變成了如

C語言求兩整數

上程式碼: #include<stdio.h> #define Max(a,b) ((a>b)?(a):(b))  //預處理實現 int max(int a,int b)   //函式實現 {return a>b?a:b; } int main()

ORACLE 內建函式之 GREATEST 和 LEAST(求列的,)

轉載自:http://dlblog.iteye.com/blog/1274005 Oracle比較一列的最大值或者最小值,我們會不假思索地用MAX和MIN函式,但是對於比較一行的最大值或最小值呢?是不是日常用的少,很多人都不知道有ORACLE也有內建函式實現這個功能:COALESCE / GREATES

陣列兩個數異或求

特別說明:本文轉載自lingen1949 大神的文章,按照個人理解增加了部分註釋,感謝大神提供思路。在此附上原文連結: 題目要求: Given a non-empty array of numbers, a0, a1, a2, … , an-1, where