演算法:在一個集合中選取所有符合條件的元素組合
做了好幾個題目都遇到題中的場景。於是寫了個演算法,元素組合條件是求和。
演算法能適應的場景要求組合條件可以拆分的,有對應的逆運算。
程式碼實現的是取三個元素和在40~60之間的組合。迴圈n(testList.size())次可以獲取所有符合條件的組合。
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class JunitTest {
@Test
public void test() throws InterruptedException {
List<Integer> testList = new ArrayList<Integer>();
testList.add(5);
testList.add(10);
testList.add(15);
testList.add(20);
testList.add(25);
testList.add(30);
testList.add(35);
System.out.println(select(40, 60, 3, testList));
}
//遞迴選擇指定個數 符合條件的所有組合
private List<List<Integer>> select(int min, int max, int count, List<Integer> resourceList) {
if (count == 1) {
return eligible(min, max, resourceList);
} else {
List<List<Integer>> rsList = new ArrayList<List<Integer>>();
Integer i = resourceList.remove(0 );
if (resourceList.size() >= count) {
List<Integer> tmpList = new ArrayList<Integer>(resourceList);
//去掉第一個元素 剩餘元素中的組合
rsList.addAll(select(min, max, count, tmpList));
}
//個數--,條件拆分 min - i, max - i
rsList.addAll(assembly(i, select(min - i, max - i, --count, resourceList)));
return rsList;
}
}
//選擇符合條件的結果
private List<List<Integer>> eligible(int min, int max, List<Integer> resourceList) {
List<List<Integer>> rsList = new ArrayList<List<Integer>>();
for (Integer i : resourceList) {
if (i >= min && i <= max) {
List<Integer> tmp = new ArrayList<Integer>();
tmp.add(i);
rsList.add(tmp);
}
}
return rsList;
}
//組合
private List<List<Integer>> assembly(Integer base, List<List<Integer>> resourceList) {
List<List<Integer>> rsList = new ArrayList<List<Integer>>();
for (List<Integer> list : resourceList) {
list.add(base);
rsList.add(list);
}
return rsList;
}
}
相關推薦
演算法:在一個集合中選取所有符合條件的元素組合
做了好幾個題目都遇到題中的場景。於是寫了個演算法,元素組合條件是求和。 演算法能適應的場景要求組合條件可以拆分的,有對應的逆運算。 程式碼實現的是取三個元素和在40~60之間的組合。迴圈n(testList.size())次可以獲取所有符合條件的組合。
黑馬基礎階段測試題:創建一個存儲字符串的集合list,向list中添加以下字符串:”C++”、”Java”、” Python”、”大數據與雲計算”。遍歷集合,將長度小於5的字符串從集合中刪除,刪除成功後,打印集合中的所有元素
cti ati pac 完成 body ava 字符 c++ rgs package com.swift; import java.util.ArrayList; import java.util.List; import java.util.ListIterator
編寫一個撲克類(每張撲克有花色和數值,例如紅心A,草花10),將52張撲克牌放到集合中(自己去選擇集合類) 編寫3個方法 方法1.將集合中的所有撲克重新洗牌,並將撲克輸出(打印出來即可) 方法2
/** * Created by whp on 2018/8/1. */ public class Poker { String color; String number; public Poker(String color, String number) {
找詞”遊戲是在美國流行的一種遊戲,它要求遊戲者從一張填滿字母的正方形表中,找出包含在一個給定集合中的所有詞。這些詞可以豎著讀(向上或向下)、橫著讀(從左或從右),或者沿45度對角線斜著讀。
public class BF_String { public static void main(String[] args){ char[][] ccol={{'D','H','O','B','S','H','N','E','P','T','U','N'
java8stream操作:從集合中獲取符合條件的元素
List<Student> students = new ArrayList<>(); students.add(new Student(1,"張三",
課程作業02:將課程中的所有動手動腦的問題以及課後實驗性的問題,整理成一篇文檔。
運算符 示例 turn 整理 .cn 輸出結果 ole 輸出 兩個 問題1:一個Java類文件中真的只能有一個公有類嗎?請使用Ecplise或javac檢測一下以下代碼,有錯嗎? 一個java類文件中只能有一個公有類。用Ecplise測試,當public類嵌套在publi
將一個集合類的某一欄位遍歷到另一個集合中
我們在開發中經常會遇到這種情況,就是在查詢一個列表的時候,可能會需要將另一個表中的某些欄位拼接到這一個列表中,在這種時候,如果是取到列表之後,然後根據某一個欄位再去一個一個的查詢的話,就會很費資源,介面也會變的很慢。 &nbs
資料庫SQL實踐49:針對庫中的所有表生成select count(*)對應的SQL語句
思路: 列出資料庫中所有表名: select name from sqlite_master where type='table' 用||連線 "select count(*) from" || name || ";"從而實現連線 select "select count(*)
Java ArrayList使用技巧 - 從第一個List中去除所有第二個List中與之重複的元素
需求:從 mAllList 中去除所有 mSubList 中與之重複的元素 測試資料:mAllList 中包含100000個無序無重複字串,mSubList 中包含50000個無序無重複字串 方法一、ArrayList中提供的removeAll方法(效率最低) mAllList
CSS佈局:在一個div中使兩個列元素自動等高
html: <body> <div class="content-wrapper"> <div class="left"> <h1>簡歷</h1> </div> <
已知線性表中元素以值遞增有序排列,並以單鏈表作為儲存結構,設計一個演算法,刪除表中值相同的多餘元素
/* 已知線性表中元素以值遞增有序排列,並以單鏈表作為儲存結構 * 設計一個演算法,刪除表中值相同的多餘元素 * 使得操作後表中所用元素值均不同,同時釋放被刪除的結點空間 */ #include<stdio.h> #inclu
Map.values方法——獲取Map集合中的所有鍵值物件
該方法用來獲取Map集合中的所有鍵值物件,這些鍵值物件將存放在另一個集合物件中。 語法 values() 示例 本示例建立一個Map集合物件並新增一些內容,然後呼叫values方法獲取包含所有鍵值的集合物件,並輸出這些鍵值資訊。 publ
Dijkstra演算法(一個節點到其他所有節點的最短路徑)
Dijkstra(迪傑斯特拉)演算法是典型的單源最短路徑演算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。Dijkstra演算法是很有代表性的最短路徑演算法,在很多專業課程中都作為基本內容有詳細的介紹,如資料
常見演算法:C語言中連結串列的操作(建立,插入,刪除,輸出)
連結串列中最簡單的一種是單向連結串列,它包含兩個域,一個資訊域和一個指標域。這個連結指向列表中的下一個節點,而最後一個節點則指向一個空值。 一個單向連結串列包含兩個值: 當前節點的值和一個指向下一個節點的連結 一個單向連結串列的節點被分成兩個部分。第一個部分儲存或者顯示關於
Python練習題2:提取列表中的所有數字,包括字串中的數字 target = ['25',5,'a',1,2,'b',4,5,'A','python','3.6']
方法一:使用type(eval())函式判斷型別,再用try-except-else處理異常 1 def num_trans(): 2 """使用eval()函式判斷""" 3 target = ['25',5,'a',1,2,'b',4,5,'A','python','3.6'
JS實現去除一個字串中的所有標點和空格
這是今天做練習的時候碰到的。 有兩種辦法:一是先將要處理的字串分割成陣列,再用filter濾去陣列中的標點和空格(filter對於回撥函式返回true的項會保留在陣列中,返回false的會被濾出陣列),最後再把陣列轉成字串。下面是實現方法: function
計算機圖形學 學習筆記(一):概述,直線掃描轉換演算法:DDA,中點畫線演算法,Bresenham演算法
前言 感謝中國農大 趙明老師的分享~ 現在我要為我自己走向遊戲程式設計打下基石~ 1 計算機圖形學概論 1.1 計算機圖形學課程簡介 《計算機圖形學》是計算機、地理資訊系統、應用數學、機械、建築等專業本科教學中的一門重要的專業基礎課 如影
常見演算法:C語言中的排序演算法--氣泡排序,選擇排序,希爾排序
氣泡排序(Bubble Sort,臺灣譯為:泡沫排序或氣泡排序)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小
hive中使用case、if:一個region統計業務(hive條件函式case、if、COALESCE語法介紹:CONDITIONAL FUNCTIONS IN HIVE)
CREATE TABLE test_lmj_mdm_tmp AS SELECT guid, CONCAT('adn_',adn_id) AS adn, CONCAT('time_',substr(createtime,12,2)) AS hour, CONCAT('os_',os_id) AS os, cas
Kaggle爆文:一個框架解決幾乎所有機器學習問題
problem pan port 例子 過程 保持數據 檢驗 block p s 上周一個叫 Abhishek Thakur 的數據科學家,在他的 Linkedin 發表了一篇文章 Approaching (Almost) Any Ma