日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 寻找和为定值的多个数_算法笔记_037:寻找和为定值的两个数(Java)

發布時間:2024/9/27 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 寻找和为定值的多个数_算法笔记_037:寻找和为定值的两个数(Java) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 問題描述

輸入一個整數數組和一個整數,在數組中查找兩個數,滿足他們的和正好是輸入的那個整數。如果有多對數的和等于輸入的整數,輸出任意一對即可。例如,如果輸入數組[1,2,4,5,7,11,15]和整數15,那么由于4+11 = 15,因此輸出4和11。

2 解決方案

2.1 排序夾逼法

首先將整數數組,使用合并排序進行從小打到的排序,然后對這個排完序的數組從兩頭往中間遍歷,一旦出現兩個數的和等于輸入的那個整數,則立即輸出這兩個數,并結束遍歷。

具體代碼如下:

package com.liuzhen.array_2;

public class TwoSumN {

/*

* 參數A:給定的一個從小到大排序的數組

* 參數n:待求和數n

* 函數功能:打印出A中兩個元素,滿足A[i]+A[j] = n

*/

public void getTwoSumN(int[] A,int n){

int start = 0;

int end = A.length - 1;

while(start < end){

if(A[start] + A[end] == n){

System.out.println("\n數組中元素A["+start+"]" +

" + A["+end+"] = "+n+",A["+start+"] = "+A[start]+",A["+end+"] = "+A[end]);

break;

}

else{

if(A[start] + A[end] > n)

end--;

else

start++;

}

}

}

//歸并排序

public void mergeSort(int[] A){

if(A.length > 1){

int[] leftA = getHalfArray(A,0); //數組A的左半部分

int[] rightA = getHalfArray(A,1); //數組A的右半部分

mergeSort(leftA);

mergeSort(rightA);

getMerge(A,leftA,rightA);

}

}

/*

* 參數A:要進行折半的數組

* 參數judge:judge == 0表示返回數組A左上半部分,judge != 0表示返回數組A的右半部分

* 函數功能:把數組按照長度均分為上半部分和下半部分

*/

public int[] getHalfArray(int[] A,int judge){

int[] result;

if(judge == 0){

result = new int[A.length/2];

for(int i = 0;i < A.length/2;i++)

result[i] = A[i];

}

else{

result = new int[A.length - A.length/2];

for(int i = 0;i < A.length - A.length/2;i++)

result[i] = A[i+A.length/2];

}

return result;

}

/*

*參數A:給定待排序數組

*參數leftA:數組A的左半部分

*參數rightA:數組的右半部分

*函數功能:返回數組A的從小到大排序

*/

public void getMerge(int[] A,int[] leftA,int[] rightA){

int i = 0; //用于計算當前遍歷leftA的元素個數

int j = 0; //用于計算當前遍歷rightA的元素個數

int count = 0; //用于計算當前得到按從小到大排序的A的元素個數

while(i < leftA.length && j < rightA.length){

if(leftA[i] < rightA[j]){

A[count++] = leftA[i];

i++;

}

else{

A[count++] = rightA[j];

j++;

}

}

if(i < leftA.length){

while(i < leftA.length)

A[count++] = leftA[i++];

}

if(j < rightA.length){

while(j < rightA.length)

A[count++] = rightA[j++];

}

}

public static void main(String[] args){

TwoSumN test = new TwoSumN();

int[] A = {2,1,7,4,6,1,2,4,3,6,8,4,2,1,7,3,4,6,8,3,4};

test.mergeSort(A);

System.out.println("對數組A進行合并排序后結果:");

for(int i = 0;i < A.length;i++)

System.out.print(A[i]+" ");

test.getTwoSumN(A, 10);

}

}

運行結果;

對數組A進行合并排序后結果:

1 1 1 2 2 2 3 3 3 4 4 4 4 4 6 6 6 7 7 8 8

數組中元素A[3] + A[20] = 10,A[3] = 2,A[20] = 8

算法筆記&lowbar;041&colon;尋找和為定值的多個數(Java)

目錄 1 問題描述 2 解決方案 1 問題描述 輸入兩個整數n和sum,要求從數列1,2,3,...,n中隨意取出幾個數,使得它們的和等于sum,請將其中所有可能的組合列出來. 2 解決方案 上述問題 ...

在數組中尋找和為定值的n個數

/*-------------------------------------------------------*/ /*尋找和為定值的兩個數 輸入一個數組A[0,N-1]和一個數字Sum,在數組中 ...

編程之法section II&colon; 2&period;2 和為定值的兩個數

====數組篇==== 2.2 求和為定值的兩個數: 題目描述:有n個整數,找出其中滿足兩數相加為target的兩個數(如果有多組滿足,只需要找出其中一組),要求時間復雜度盡可能低. 解法一: 思路: ...

【Data Structure &amp&semi; Algorithm】在排序數組中查找和為定值的兩個數

在排序數組中查找和為定值的兩個數 題目:輸入一個已經按升序排序過的數組和一個數字,在數組中查找兩個數,使得它們的和正好是輸入的那個數字,要求時間復雜度是O(n).如果有多對數字的和等于輸入的數字,輸出 ...

Java實現尋找和為定值的多個數

1 問題描述 輸入兩個整數n和sum,要求從數列1,2,3,-,n中隨意取出幾個數,使得它們的和等于sum,請將其中所有可能的組合列出來. 2 解決方案 上述問題是典型的背包問題的應用,即先找出n個數 ...

【劍指offer】和為定值的兩個數

轉載請注明出處:http://blog.csdn.net/ns_code/article/details/24933341 題目描寫敘述: 輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,是的 ...

【劍指offer學習】求和為定值的兩個數(拓展)

接著上面一篇文章:?http://blog.csdn.net/u013476464/article/details/40651451 接下來我們拓展一下題目,如果數組是亂序的,并且規定數組中的元素所有 ...

算法筆記&lowbar;035&colon;尋找最小的k個數(Java)

目錄 1 問題描述 2 解決方案 2.1 全部排序法 2.2 部分排序法 2.3 用堆代替數組法 2.4線性選擇算法 ? 1 問題描述 有n個整數,請找出其中最小的k個數,要求時間復雜度盡可能低. 2 ...

算法筆記&lowbar;031&colon;計算中值和選擇問題(Java)

目錄 1 問題描述? 2 解決方案 2.1 計算中值問題 2.2 選擇問題 ? 1 問題描述 中值問題是求一個n個數列表中某一數組下標k,它要求該下標元素比列表中的一半元素大,又比另一半元素小,這個中 ...

隨機推薦

ReactJS入門(四)—— 組件API

本篇將介紹 React 組件的API,其中主要的幾個API我們在第一篇的時候便已介紹過,這里可以做個溫故知新. 本篇的代碼你也可以在我的Github上獲取到. setState 參數:?nextSta ...

深入理解Bootstrap筆記

框架介紹 1.框架簡介 2.CSS基本語法 3.JavaScript基本語法 4.Bootstrap整體架構 5.12柵格系統 6.CSS組件架構設計思想 7.JavaScript插件架構 CSS布局 ...

iOS——Command-Line 查看當前SDK版本并修改默認SDK版本

在工作中可能會碰到用命令行編譯.打包iOS應用程序的情況(xcodebuild相關命令). 但是由于SDK版本問題,會報錯,說某SDK版本不對,可能是因為升級Xcode導致的SDK版本升級,為了避免高 ...

objective-c中字符串長度計算

我們知道,在c語言中,使用sizeof ()計算在內存中占用的字節數, 引用string.h后,使用strlen()計算字符串的長度(不包含\0). 而在object-c中, "length ...

Struts2 框架驗證

struts2框架驗證(xml方式):?? ?* 首先要從頁面中獲取對應的標簽name屬性的值,在動作類action中聲明同名的屬性,提供get和set方法?? ??? ?* 創建一個xml格式驗證文 ...

STM32串口usart發送數據

主函數請直接關注41行到47行代碼!! #include "stm32f10x.h" // 相當于51單片機中的 #include #include ...

新人入坑Redis必會的吐血總結

新人入坑Redis必會的吐血總結 一.什么是Redis Redis是一個使用C語言開發的開源的高性能的key-value存儲系統,我們可以把它近似理解為Java Map.簡單來講,Redis是一種NO ...

JDBC輔助類封裝 及應用

一:代碼圖解: 二:配置文件: driverClassName=com.mysql.jdbc.Driver url=jdbc\:mysql\://127.0.0.1\:3306/xlzj_sh_new ...

Ubuntu18&period;10下運行blender2&period;80bate閃退&lpar;問題&quest;&rpar;

Ubuntu18.10下直接運行blender2.80bate閃退, 運行blender2.79正常. ================= root@tom-laptop:/# uname -aLin ...

禁用firefox 56自動更新

firefox 56支持舊式擴展,這很重要! 它卻自動更新,簡單地關了也不行,很是牛氓! ========== -備份C:\Users\用戶名\AppData\Roaming\Mozilla\Fire ...

總結

以上是生活随笔為你收集整理的java 寻找和为定值的多个数_算法笔记_037:寻找和为定值的两个数(Java)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。