我在codingbat.com上遇到过这个问题:Problem
问题:
给定一个int数组,如果数组包含两个相邻的7,则返回true,或者有两个7由一个元素分隔,例如{7,1,7}。
has77([1,7,7])→true
has77([1,7,1,7])→true
has77([1,7,1,1,7])→false
我解决了,但我的方法效率不高。与问题相比,我的解决方案的代码很大。任何人都可以告诉我如何以聪明的方式解决这个问题。
我的代码:
public boolean has77(int[] nums) {
int i = 0;
int arraylength = 0;
while(i != nums.length){
if(nums[i] == 7){
arraylength++;
}
i++;
}
int[] sevens = new int[arraylength];
if(arraylength == 0){
return false;
}
i =0;
int j = 0;
while(i != nums.length){
if(nums[i] == 7){
sevens[j] = i;
j++;
}
i++;
}
i = 0;
while(i != arraylength-1){
if(sevens[i+1] - sevens[i]==1 || (sevens[i+1]- sevens[i]==2)){
return true;
}
i++;
}
return false;
}
答案 0 :(得分:1)
这个答案将告诉你如何这样做,但不会给你代码。编写代码是为了让您自己做,因为您选择接受CodingBat上的挑战。
更高效的解决方案:只迭代一次数组。如果当前元素是7,而前一个元素或之前的元素也是7,则返回true
。
答案 1 :(得分:0)
我终于破解了这个问题。 这是代码:
struct Item
{
char name[21];
double price;
int quantity;
int minimum_qty;
_Bool is_taxed;
};
struct Item enterItem(int sku)
{
struct Item item;
printf(" SKU: %d", sku);
printf(" Name: "); scanf("%20[^\n]", item.name);
clearKeyboard(); // Function call to remove'\n'
printf(" Price: ");
item.price = getDouble(); // Function call to get user input in double
printf(" Quantity: ");
item.quantity = getInt(); // Function call to get user input in int
printf("Minimum Qty: ");
item.minimum_qty = getInt();
printf(" Is taxed: ");
item.is_taxed = getYesOrNo(); // Function call to get user input in bool > (Y)es or (N)o
return item;
}
答案 2 :(得分:0)
尝试一下:-
public boolean has77(int[] nums) {
for(int i=0;i<=nums.length-2;i++){
if(nums[i]==7&&nums[i+1]==7)
return true;
for(int j=0;j<nums.length-2;j++){
if(nums[j]==7&&nums[j+2]==7)
return true;
}
}
return false;
}